我发现有关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}}来扩展@User(Principal),使其具有与上述类似的场景,我可以在其中传递需要检查特定的访问权限工作人员。
如果1.无法完成,将登录的用户访问权限传递给用于构建我的页面的ViewModel是否可行?风险太大了吗?我错误地认为这应该没问题,因为这是基于服务器的代码而且不会传递给客户端吗?
如果1&amp; 2不适合,实现这个目的的最佳/推荐方法是什么?
由于
答案 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。但是,恕我直言,第一个选择要好得多,因为你不需要使用访问权限检查来混乱你的控制器。