首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC授权使用静态设置类的动态角色

MVC授权使用静态设置类的动态角色
EN

Stack Overflow用户
提问于 2018-02-23 12:08:24
回答 1查看 204关注 0票数 0

我目前正在开发一个需要多个客户使用的应用程序,这意味着我必须在每次发布应用程序之间更改授权标记中的角色。

目前,我正在静态设置类中存储特定于客户的数据

代码语言:javascript
复制
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
        }
    }
}

我希望能够为每个配置设置超级用户角色,但是属性必须是常量,才能用作授权属性。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 14:43:58

最后,我创建了一个自定义的授权属性

代码语言:javascript
复制
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;
        }
    }
}

然后我可以这样用:

代码语言:javascript
复制
[AuthorizeRole(AccessRole = "Any")]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48947555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档