微服務中如何設計一個許可權授權服務

發表於2020-06-24

基於角色的訪問控制  (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

 

相關文章