zoukankan      html  css  js  c++  java
  • 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中注册才有效果,这个问题有哪位大神可以讨论一下吗?

  • 相关阅读:
    Python学习摘要201802
    机器学习-梯度下降参数调优小结
    用尽洪荒之力学习Flask源码
    Flask类的属性和方法大全
    Flask第三方工具组件介绍
    Flask自带的常用组件介绍
    Centos下部署Flask
    Python Tips阅读摘要
    web程序设计关于我们
    软工实践总结
  • 原文地址:https://www.cnblogs.com/SasaL/p/9944794.html
Copyright © 2011-2022 走看看