在asp.net mvc中为角色分配访问权限

时间:2017-02-12 04:48:44

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

我发现有关asp.net mvc访问权限的大多数文章/示例都与使用角色限制对特定控制器的访问有关,但我试图弄清楚如何将特定访问权限分配给属于特定角色的用户。

我的场景非常简单,因为在用户级别需要访问权限的唯一角色是"员工"作用:

  • 管理员:访问所有功能。
  • 员工:访问特定功能。
  • 会员:无法访问特定功能。

理想情况下,我希望实现类似于以下内容的内容

@if (@User.IsInRole("IsAdmin") || (@User.IsInRole("IsStaff") && 
     @User.HasAccess("DownloadData"))
{
    <a href='@Url.Action("DownloadData"....
    </a>    
}

我有一个单独的表格,用于存储员工访问权限,因为这些是在用户级别分配的,所以我使用的是Id生成的AspNetUsers所以当我登录以获得特定员工的相关访问权限时,一个简单的EF / SQL Linq连接可以解决这个问题。

现在我的问题是:

  1. 我是否可以通过引入一个新函数{@ 1}}来扩展@User(Principal),使其具有与上述类似的场景,我可以在其中传递需要检查特定的访问权限工作人员。

  2. 如果1.无法完成,将登录的用户访问权限传递给用于构建我的页面的ViewModel是否可行?风险太大了吗?我错误地认为这应该没问题,因为这是基于服务器的代码而且不会传递给客户端吗?

  3. 如果1&amp; 2不适合,实现这个目的的最佳/推荐方法是什么?

  4. 由于

1 个答案:

答案 0 :(得分:0)

最简单的方法是在var Sequelize = require('sequelize'); var sequelize = new Sequelize('database', 'username', 'password'); var User = sequelize.define('user', { username: Sequelize.STRING, birthday: Sequelize.DATE, thumbnailPhotoURL: Sequelize.STRING }); User.beforeCreate(function(model, options, cb) { var urlToDownloadThumbnailPhotoFrom = model.urlToDownloadThumbnailPhotoFrom; //.....Here you write the logic to get s3 url using urlToDownloadThumbnailPhotoFrom and then assign it to model and call the call back it will automatically get saved model.thumbnailPhotoURL = thumbnailPhotoURL; cb(); }); IPrincipal上创建扩展方法。这样,您就可以在一个位置统一访问权限定义。如果您有许多访问权限检查,可能需要添加访问权限作为声明(如果您正在使用声明)或以某种方式缓存它们,这样您每次都不需要数据库访问(如果它们存储在数据库中) 。

另外,如果您将访问权限传递给视图,那么它是正确的,因为视图呈现为HTML。但是,恕我直言,第一个选择要好得多,因为你不需要使用访问权限检查来混乱你的控制器。