我目前正在开发一个需要多个客户使用的应用程序,这意味着我必须在每次发布应用程序之间更改授权标记中的角色。
目前,我正在静态设置类中存储特定于客户的数据
public abstract class Settings
{
public virtual string ConnectionString { get; internal set; } = "";
public virtual string SharepointMail { get; internal set; } = "";
public virtual string SharepointPassword { get; internal set; } = "";
public virtual string SharepointSite { get; internal set; } = "";
public virtual string SharepointDocumentLibrary { get; internal set; } = "";
public virtual int ProjectId { get; internal set; }
public virtual string SuperUserRole { get; internal set; }
public virtual string UserRole { get; internal set; } = "";
public virtual string ContributorRole { get; internal set; } = "";
private static Settings _instance;
public static Settings Instance
{
get
{
if (_instance != null)
return _instance;
#if DEBUG
return _instance = new DebugSettings();
#elif TCOTEST
return _instance = new TcoTestSettings();
#elif TCORELEASE
return _instance = new TcoReleaseSettings();
#endif
}
}
}我希望能够为每个配置设置超级用户角色,但是属性必须是常量,才能用作授权属性。
我该怎么做?
发布于 2018-02-23 14:43:58
最后,我创建了一个自定义的授权属性
public class AuthorizeRoleAttribute : AuthorizeAttribute
{
public string AccessRole { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
switch (AccessRole)
{
case "SuperUser":
return httpContext.User.IsInRole(Settings.Instance.SuperUserRole);
case "User":
return httpContext.User.IsInRole(Settings.Instance.UserRole) || httpContext.User.IsInRole(Settings.Instance.SuperUserRole);
case "Any":
return httpContext.User.IsInRole(Settings.Instance.ContributorRole) || httpContext.User.IsInRole(Settings.Instance.UserRole) || httpContext.User.IsInRole(Settings.Instance.SuperUserRole);
default:
return false;
}
}
}然后我可以这样用:
[AuthorizeRole(AccessRole = "Any")]https://stackoverflow.com/questions/48947555
复制相似问题