具有角色的 AuthorizeAttribute 但不对角色值进行硬编码

2023-12-13

是否可以添加角色但不能对值进行硬编码,例如:

[Authorize(Roles="members, admin")]

我想从数据库或配置文件中检索这些角色,如果我需要为控制器操作添加/删除角色,则不需要重建应用程序。

我知道用枚举可以做到......http://www.vivienchevallier.com/Articles/create-a-custom-authorizeattribute-that-accepts-parameters-of-type-enum但即使这样仍然不够灵活以满足我的需求;尽管它更干净,但它仍然有点硬编码。


您可以创建自定义授权属性,该属性将比较用户角色和配置中的角色。

public class ConfigAuthorizationAttribute: AuthorizeAttribute
{
    private readonly IActionRoleConfigService configService;
    private readonly IUserRoleService roleService;

    private string actionName;

    public ConfigAuthorizationAttribute()
    {
        configService = new ActionRoleConfigService();
        roleService = new UserRoleService();
    }

    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        actionName = filterContext.ActionDescription.ActionName;
        base.OnAuthorization(filterContext);
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var availableRoles = configService.GetActionRoles(actionName); // return list of strings
        var userName = httpContext.User.Identity.Name;
        var userRoles = roleService.GetUserRoles(userName); // return list of strings
        return availableRoles.Any(x => userRoles.Contains(x));
    }
}

我希望它对你有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有角色的 AuthorizeAttribute 但不对角色值进行硬编码 的相关文章

随机推荐

  • python tkinter从命令中使用的函数返回值[重复]

    这个问题在这里已经有答案了 如何获取A到C的返回值 顺便说一下 我没有使用类 def button mylabel Label myGui text hi grid row 0 column 0 A B get return A B Str
  • 创建许可系统[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我为我工作的公司开发了一个信息管理系统 现在我想制作一种许可系统 以帮助防止任何人仅仅获取副本并将其设置在自己的家庭服务器上并将其用于任何目的 我知道也许最简单的方法是在系统的每
  • 将十六进制地址传递给指针变量

    我知道如何使用指针 但我不知道该怎么做 我有一个十六进制地址 当然它具有来自任何应用程序的任何值 我知道找到我想要的地址 我想编写一段 C 代码来将此地址传递给指针变量 然后我可以从该地址捕获值 依此类推 例如 hex 0x00010010
  • 将列名传递给函数

    我有一个非标准评估的简单问题 将变量名作为参数传递到函数中 作为一个可重现的例子 这是一件简单的事情 取一个变量的平均值 mpg来自mtcars数据集 我的最终目标是拥有一个可以输入数据集和变量并获取平均值的函数 所以没有函数 librar
  • 如何在 URL 中隐藏控制器名称?

    如何在 URL 中隐藏控制器名称 我使用 ASP NET MVC 原来的网址是 http www sample com Users mvc UserDetail 9615 Users 是控制器名称 UserDetail 是操作名称 9615
  • PCRE 正则表达式 到 sed 正则表达式

    首先 我很抱歉我的英语不好 我是一个德国人 下面给出的代码在 PHP 中运行良好 string preg replace href i href 1 string 现在T需要同样的sed 我认为应该是 sed s href href 1 g
  • 如何在您的应用程序中使用标准 Mac OS X 图标?

    如何在您的设计 应用程序中使用标准 Mac OS X 图标 By standard icons I mean toolbar icons from this screenshots 是否有存储这些文件的位置或有什么方法可以从 Mac OS
  • 水平和垂直手风琴

    我想在 asp net 中创建水平和垂直的手风琴 我已经使用 Ajax Toolkit Accordion 但无法更改其方向 created using ajax toolkit looking for this 这是 ASP NET C
  • 可从时间戳列表中观察到

    如果我有一个包含时间戳的对象列表 如何制作一个在时间戳之间的相对时间触发事件的可观察对象 例如 如果我有三个时间戳为 2014 01 01 10 30 2014 01 01 10 45 和 2014 01 01 11 30 的对象 我希望第
  • Service Fabric:是否可以同时运行 Linux 和 Windows 节点

    是否可以在 Azure Service Fabric 上的同一群集中同时运行 Linux 和 Windows 节点 不 目前这是不可能的
  • python paho mqtt无法使用用户名和密码连接到mqtts

    我的 raspberrypi 上的以下 python 代码无法连接到我的 mqtt 代理 它只是在打印后挂起Connecting import paho mqtt client as mqtt def on connect client u
  • Cakephp foreach 条件

    我必须显示 3 份预订的预订表 它应该显示 3 行 3 项预订 但它只显示一行 在控制器中 public function index hote this gt Reservation gt recursive 1 this gt load
  • 使用 jQuery 从 HTML 创建 JSON 对象

    问题概述 假设我有一批糖果 这批货物有许多盒子 每个盒子都有许多独特的糖果类型 每个盒子都有一个唯一的ID 与其他盒子不同 糖果类型也是如此 此外 糖果还有其他特征 如颜色 味道和数量 示例代码 采取以下 HTML 示例 div class
  • 由给定数字相加形成的所有可能的数字

    如果我有n r数字 从1 to n where r中间缺少数字 那么我如何计算这些数字相加可以形成的所有可能数字 以 2 3 4 5 6 为一组 例如 假设我有5 2数字 那是 1 2 4 and 3 5缺失 现在 我可以形成 1 1 2
  • 使用 Java 查找基元数组中的最大/最小值

    编写一个函数来确定数组中的最小值 最大值很简单 例如 param chars return the max value in the array of chars private static int maxValue char chars
  • 如何清除使用 MVC HTML 帮助器定义的文本框

    我不知道如何做这个非常简单的事情 我的页面包含一组文本框 用户可以填写这些文本框以将项目添加到列表中 然后该项目将显示在下拉列表中 此时 我希望清除 添加 文本框 我认为这是大多数用户所期望的行为 该项目已添加 现在文本框应该是空的 准备好
  • GestureDetector onScroll()问题(执行3次)

    我有这段代码来使用 GestureDetector 检测滚动手势 它可以工作 只不过它检测到滚动活动 3 次而不是一次 我怎样才能让它只检测一次 它记录滚动活动 log i 行 3 次 并播放声音 mp start 3 次而不是一次 也导致
  • 使用 gstreamer 1.12.2 将 MPEG-TS 分割为 MP4 文件

    我有一个 MPEG TS 文件 其中包含两个视频 音频流对 gst discoverer 1 0 Recorder Aug01 12 30 39 ts Analyzing Recorder Aug01 12 30 39 ts Done di
  • mysql root权限更新information_schema错误

    当我尝试从 information schema 数据库更新一张表 GLOBAL VARIABLES 时 我收到错误 Access denied for user root localhost to database information
  • 具有角色的 AuthorizeAttribute 但不对角色值进行硬编码

    是否可以添加角色但不能对值进行硬编码 例如 Authorize Roles members admin 我想从数据库或配置文件中检索这些角色 如果我需要为控制器操作添加 删除角色 则不需要重建应用程序 我知道用枚举可以做到 http www