我正在使用ASP Net Core WebAPI处理我的应用程序中的安全性,在我的应用程序中,管理员创建了一个具有权限的新用户,并且json发送回如下所示:
User: {
Name:"Alex",
SurName:"Park",
Email: "[email protected]",
Permission: {
EditEmployee: true,
DeleteEmployee: true,
CreateEmployee: false,
EditClient: true,
DeleteClient: true,
CreateClient: false,
.....
...... // more than 15 other permission
}
}
在我的数据库中,我有表用户:具有RoleId外键表角色具有用户和表UserClaims的alll角色,该表保存了具有所有许可权值的UserId,键入我的问题是:如果我在启动时在服务中添加策略,我必须定义政策 ; 还有15个,我认为很多
services.AddAuthorization(options =>
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeEdit", policy => policy.RequireClaim("EditEmployee"));
...
... // SAME WORK WITH THE OTHER CLAIMS
});
我问是否有使代码最小化的良好实践,谢谢
您可以通过来动态创建授权策略AuthorizationPolicyProvider
。但是还需要提供索赔。
自定义一个AuthorizationPolicyProvider
,它可以获取策略名称,我们可以根据该策略名称创建策略。
public class CustomAuthorizepolicyProvider : DefaultAuthorizationPolicyProvider
{
public CustomAuthorizepolicyProvider(IOptions<AuthorizationOptions> options):base(options)
{
}
public override Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
{
//generate the authorization policy
var claims= new List<string>
{
// give 15 claims, or get the claims from database
};
foreach(var claim in claims)
{
if (claim == policyName)
{
return Task.FromResult(new AuthorizationPolicyBuilder().RequireClaim(claim).Build());
}
}
return base.GetPolicyAsync(policyName);
}
}
注意:CustomAuthorizepolicyProvider
在服务中注册为单例。
services.AddSingleton<IAuthorizationPolicyProvider,CustomAuthorizepolicyProvider>();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句