Fork me on GitHub

微服务中如何设计一个权限授权服务

基于角色的访问控制  (RBAC) 

  是将系统访问限制为授权用户的一种方法,是围绕角色和特权定义的与策略无关的访问控制机制,RBAC的组件使执行用户分配变得很简单。

  在组织内部,将为各种职务创建角色执行某些操作的权限已分配给特定角色。成员或职员(或其他系统用户)被分配了特定角色,并且通过这些角色分配获得执行特定系统功能所需的权限。由于未直接为用户分配权限,而是仅通过其角色(一个或多个角色)获取权限,因此,对单个用户权限的管理就变成了简单地为用户帐户分配适当角色的问题。这简化了常见操作,例如添加用户或更改用户部门。

RBAC定义了三个主要规则

  1、角色分配:仅当对象已选择或分配了角色时,对象才能行使权限。

  2、角色授权:必须为主体授权主体的活动角色。使用上面的规则1,此规则可确保用户只能承担获得其授权的角色。

  3、权限授权:仅当对象的活动角色被授权时,对象才能行使权限。使用规则1和2,此规则可确保用户只能行使其被授权的权限。

创建RBAC的模型

菜单 

  public class SysMenu
    {
        /// <summary>
        ///     父级
        /// </summary>
        public int ParentId { get; set; } = 0;

        /// <summary>
        ///     菜单名称
        /// </summary>
        [StringLength(20)]
        public string Name { get; set; }

        /// <summary>
        ///     菜单地址
        /// </summary>
        [StringLength(20)]
        [Required]
        public string Url { get; set; }

        /// <summary>
        ///     层级
        /// </summary>
        [Column(TypeName = "tinyint(4)")]
        public int Level { get; set; } = 1;

        /// <summary>
        ///     菜单权限(list<int /> json)
        /// </summary>
        [StringLength(100)]
        public string Operates { get; set; }

        /// <summary>
        ///     排序
        /// </summary>
        public int Sort { get; set; }

        /// <summary>
        /// 菜单图标
        /// </summary>
        public string Icon { get; set; }        
    }

 功能

  public class SysOperate
    {
        /// <summary>
        ///     按钮名称
        /// </summary>
        [StringLength(20)]
        [Required]
        public string Name { get; set; }

        /// <summary>
        ///     备注
        /// </summary>
        [StringLength(int.MaxValue)]
        public string Remark { get; set; }

        /// <summary>
        /// 唯一标识
        /// </summary>
        [Required]
        public int Unique { get; set; }
    }

角色

  public class SysRole 
    {
        /// <summary>
        ///     角色名称
        /// </summary>
        [StringLength(20)]
        [Required]
        public string Name { get; set; }

        /// <summary>
        ///     备注
        /// </summary>
        [StringLength(int.MaxValue)]
        public string Remark { get; set; }
    }

用户

    public class SysUser
    {
        /// <summary>
        ///     角色id
        /// </summary>
        public int RoleId { get; set; }

        /// <summary>
        ///     用户名
        /// </summary>
        [StringLength(32)]
        [Required]
        public string UserName { get; set; }

        /// <summary>
        ///     密码
        /// </summary>
        [StringLength(500)]
        [Required]
        public string Password { get; set; }
    }

 微服务中让它成为一个授权权限服务

  在日常工作中,总会有很多系统要做,每个系统都要一套完整的权限功能,有现成的直接拿来粘贴复制,没有现成的又要浪费很多时间去设计实现它。 如果有这样一个服务,我们可以节省很多不必要的粘贴复制操作,节省很多时间。

  于是 ketchup.zero 这样一个服务就诞生了。它是基于ketchu微服务框架来实现的一个权限授权服务,基本可以满足我们日常工作的的权限需求。

  服务的前端是基于vue的模板d2admin 开发的。

ketchup.zero的功能

登陆

面板

 

 用户配置角色

 

 菜单设置拥有那些权限

 

 权限/功能/按钮 管理

 

 角色设置权限

 

最后安利

如果它对你有帮助,请给一波start

服务 ketchup.zero 源码地址:https://github.com/simple-gr/ketchup.zero

微服务框架 ketchup 源码地址:https://github.com/simple-gr/ketchup 

ketchup 交流群:592407137

 

posted @ 2020-06-24 13:54  phil_guo  阅读(6026)  评论(7编辑  收藏  举报