• Orchard Core 自定义权限配置


    在我们为Orchard Core配置了一个新的Module之后,我们要考虑的是谁可以访问这个Module,那么这里就涉及到了一个权限的配置。如下图,添加了自定义的权限:

     Orchard Core源码:https://github.com/OrchardCMS/OrchardCore

    我们先看源码可以帮助我们了解这是如何做的。到src---->OrchardCore.Modules下面找到OrchardCore.Roles或者OrchardCore.Contents(也可以参考其他模块)。

    以OrchardCore.Roles为例,在控制器中找到了如下一段,这应该就是控制权限的。

    再找到当前模块下的Permissions.cs这个类,发现这个Permissions.cs这个类实现了IPermissionProvider这个接口,并且在Startup.cs中注册了这个Permissions.cs

    按照这个思路,我们也可以自己自定义一个权限了。先建一个Permissions.cs类,实现IPermissionProvider接口

    public class Permissions : IPermissionProvider
        {
            public static readonly Permission ManageRoles = new Permission("ManageRoles", "Managing");//首先一定要有一个基本的权限
            public static readonly Permission APIRoles = new Permission("APIRoles", "API", new[] { ManageRoles });//然后定义一个权限,这个权限隐含(包含)上面那个权限,这个好像是规定这么写的,不然会报错
            public IEnumerable<PermissionStereotype> GetDefaultStereotypes()//为对应的角色默认勾不勾选自定义的权限,下面默认不勾选,如果要默认勾选,那么在Name的下一行加上Permissions = new[] { XXX }
            {
                return new[] {
                    new PermissionStereotype {
                        Name = "Administrator",
                    },
                    new PermissionStereotype {
                        Name = "Editor",
                    },
                    new PermissionStereotype {
                        Name = "Moderator"
                    },
                    new PermissionStereotype {
                        Name = "Author",
                    },
                    new PermissionStereotype {
                        Name = "Contributor",
                    },
                    new PermissionStereotype {
                        Name = "Authenticated",
                    },
                    new PermissionStereotype {
                        Name = "Anonymous",
                    },
                };
            }
    
            public IEnumerable<Permission> GetPermissions()
            {
                return new[] { ManageRoles, APIRoles };
            }
        }

    在Controller中对需要权限验证的地方加上

    public async Task<IActionResult> Index()
    {
      if (!await _authorizationService.AuthorizeAsync(User, Permissions.APIRoles))
      {
        return Unauthorized();
      }

      return Content("hihihi");
    }

     

    然后在Startup.cs的ConfigureServices中加上如下代码

    services.AddScoped<IPermissionProvider, WarehouseAPI.Permissions>();  

    在源码中,Permissions.cs是注册在了当前模块的Startup.cs中,我一开始也是,但是发现没有注册进去,之后在web项目中的Startup.cs中注册才有效果,这个问题有哪位大神可以讨论一下吗?

  • 相关阅读:
    ubuntu安装openssh-server 报依赖错误的解决过程
    用 Scikit-Learn 和 Pandas 学习线性回归
    python 10分钟入门pandas
    (转)梯度下降法及其Python实现
    pandas处理日期时间,按照时间筛选
    谁动了我的特征?——sklearn特征转换行为全记录
    使用sklearn做单机特征工程
    罗技鼠标黑科技
    怎样给 VS 更换皮肤
    SQLSERVER存储过程基本语法
  • 原文地址:https://www.cnblogs.com/SasaL/p/9944794.html
Copyright © 2020-2023  润新知