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】标记完成。

  • 相关阅读:
    JS调用App方法及App调用JS方法
    提升用户体验之 选用合适的鼠标光标
    js仿QQ拖拽删除
    Linux下安装 mongodb
    QQ分享-定制分享卡片
    js判断浏览器语言实现网站国际化
    js复制内容到剪切板
    为什么会有堆内存和栈内存之分
    Avro实现RPC
    zookeeper学习day01
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3788175.html
Copyright © 2011-2022 走看看