zoukankan      html  css  js  c++  java
  • 功能权限设计

    1.概述

        功能权限,限定了某一类用户(按角色)对资源的访问(CRUD)。一般常见的关系为Resource(如Menu,File等),Role,User,Privilege。其中,Privilege用于存储Role和Resource之间的关系。

    2.数据表设计

    IF OBJECT_ID ('dbo.Privileges') IS NOT NULL
        DROP TABLE dbo.Privileges
    GO
    
    CREATE TABLE dbo.Privileges
        (
        ID         INT IDENTITY NOT NULL,   --主键
        ResourceID INT NOT NULL,   --资源ID
        RoleName   NVARCHAR (50) NOT NULL,  --角色名称
        Flag       INT NOT NULL,  --权限标记
        CONSTRAINT PK_Privileges PRIMARY KEY (ID)
        )
    GO

    3.数据结构

    3.1 权限常量枚举

    [Flags]
    public enum EPrivilege
    {
        Retrieve = 1 << 0,
        Create = 1 << 1,
        Update = 1 << 2,
        Delete = 1 << 3,
        None = 1 << 4
    }

    3.2 功能权限

    /// <summary>
    /// 功能权限实体
    /// </summary>
    public partial class Privilege
    {
        /// <summary>
        /// 主键
        /// </summary>
        public long ID { get; set; }
    
        /// <summary>
        /// 角色名称
        /// </summary>
        public string RoleName { get; set; }
        /// <summary>
        /// 功能菜单ID
        /// </summary>
        public string FunctionMenuID { get; set; }
    
        /// <summary>
        /// 权限位标记
        /// </summary>
        public int Flag { get; set; }
    }
    
    public partial class Privilege
    {
        /// <summary>
        /// 将Flag与EPrivilege等效转化
        /// </summary>
        public EPrivilege FlagEqualToEPrivilege
        {
            get
            {
                var str = this.Flag.ToString();
                return (EPrivilege)Enum.Parse(typeof(EPrivilege), str, true);
            }
            set
            {
                this.Flag = (int)value;
            }
        }
    
        public bool HasPrivilege(EPrivilege privilege)
        {
            return (this.FlagEqualToEPrivilege & privilege) != 0;
        }
    
    }

    3.3 DB Methods

    public class PrivilgeExtensions
    {
        public static bool HasPrivilege(this IPrincipal user, string resourceName, EPrivilege privilegeType)
        {
            //......
            return false;
        }
    }

    总结:Flag与Enum之间的自动解析应该是通过【Flags】标记完成。

  • 相关阅读:
    命令行jarsigner签字和解决找不到证书链错误
    ERROR ITMS-90034
    module.exports 和 exports
    php扩展包
    switch的使用
    debug安卓屏幕滑动会抖动
    react native编译报错
    使用iTerm2替代Mac自带Terminal终端
    编码转换
    git 操作远程 本地缓存删除
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3788175.html
Copyright © 2011-2022 走看看