用户菜单权限列表

合集下载

宾客账户(guest)或受限用户(user)权限设置

宾客账户(guest)或受限用户(user)权限设置

宾客账户(guest)或受限用户(user)的权限设置当你的电脑常常需要被他人利用,可是你又不希望他人看你的某些重要文件或不许诺他人运行某些应用程序或担忧自己系统某些重要参数被修改时,你能够先以治理员身份登录Windows系统,参照以下几条作相应设置,然后开通宾客账户或新建一个一般user账户(不是治理员,而是受限用户),让他人用那个账户登录系统,这时你就能够够安心你的电脑任意让他人折腾。

一、限制用户对文件的访问权限若是程序所在的磁盘分区文件系统为NTFS格式,治理员账户能够利用NTFS文件系统提供的文件和文件夹平安选项操纵用户对程序及文件的访问权限。

通常情形下,一个应用程序安装到系统后,本地运算机的所有账户都能够访问并运行该应用程序。

若是取消分派给指定用户对该应用程序或文件夹的访问权限,该用户也就失去了运行该应用程序的能力。

例如,要禁止受限用户运行Outlook Express应用程序,能够进行如下的操作:(1)、以administrator账户登录系统,若是当前系统启用了简单文件共享选项,需要将该选项关闭。

具体做法是,在Windows阅读器窗口点击“工具”菜单下的“文件夹选项”,点击“查看”选项页,取消“利用简单文件共享”选项的选择,点击“确信”。

(2)、打开Program Files文件夹,选中Outlook Express文件夹并单击右键,选择“属性”。

(3)、点击“平安”选项页,能够看到Users组的用户对该文件夹具有读取和运行的权限,点击“高级”。

(4)、取消“从父项继承那些能够应用到子对象的权限项目,包括那些再次明肯概念的项目”选项的选择,在弹出的提示信息对话框,点击“复制”,现在能够看到用户所具有的权限改成不继承的。

(5)、点击“确信”,返回属性窗口,在“用户或组名称”列表中,选择Users项目,点击“删除”,点击“确信”,完成权限的设置。

要取消指定用户对文件或程序的访问限制,需要为文件或文件夹添加指定的用户或组并给予相应的访问权限。

用户权限矩阵表副本

用户权限矩阵表副本

角色
天津港物流信息网用户权限设置表
管 理 层
金 融 体 系
销 售 体 系
公 共 关 系
信 息 安 全
用 户 体 验
研 究 体 系
运 营 体 系
访 客
测 试 人 员
审 计 人 员
库 管
研对 发外 相媒 关体
数 据 库 管 理
会 计 人 员
财 务 人 员
工 程 师
实 习 生
第 3 页,共 24 页
功能模块
天津港物流信息网用户权限设置表 第 15 页,共 24 页
天津港物流信息网用户权限设置表 第 16 页,共 24 页
天津港物流信息网用户权限设置表 第 17 页,共 24 页
天津港物流信息网用户权限设置表 第 18 页,共 24 页
天津港物流信息网用户权限设置表 第 19 页,共 24 页
第 4 页,共 24 页
功能模块
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
角色
天津港物流信息网用户权限设置表
管 理 层
金 融 体 系
销 售 体 系
公 共 关 系
信 息 安 全
用 户 体 验
研 究 体 系
运 营 体 系
访 客
测 试 人 员
审 计 人 员
库 管
研对 发外 相媒 关体
数 据 库 管 理
会 计 人 员
财 务 人 员
工 程 师
实 习 生
√ √ √ √ √
第 5 页,共 24 页
功能模块
角色
天津港物流信息网用户权限设置表

ANDROID权限表格

ANDROID权限表格
访问网络
android.permission.INTERNET,访问网络连接,可能产生GPRS流量
结束后台进程
android.permission.KILL_BACKGROUND_PROCESSES,允许程序调用killBackgroundProcesses(String).方法结束后台进程
管理账户
读取电话状态
android.permission.READ_PHONE_STATE,访问电话状态
读取短信内容
android.permission.READ_SMS,读取短信内容
读取同步设置
android.permission.READ_SYNC_SETTINGS,读取同步设置,读取Google在线同步设置
允许NFC通讯
android.permission.NFC,允许程序执行NFC近距离通讯操作,用于移动支持
永久Activity
android.permission.PERSISTENT_ACTIVITY,创建一个永久的Activity,该功能标记为将来将被移除
处理拨出电话
android.permission.PROCESS_OUTGOING_CALLS,允许程序监视,修改或放弃播出电话
底层访问权限
android.permission.CWJ_GROUP,允许CWJ账户组访问底层信息
手机优化大师扩展权限
android.permission.CELL_PHONE_MASTER_EX,手机优化大师扩展权限
控制定位更新
android.permission.CONTROL_LOCATION_UPDATES,允许获得移动网络定位信息改变
访问账户Gmail列表
android.permission.GET_ACCOUNTS,访问GMail账户列表

后台菜单和权限管理

后台菜单和权限管理

后台菜单和权限管理主要php⽂件:1,admin/includes/inc_menu.php ECSHOP管理中⼼菜单数组--配置菜单组及URL2,languages/zh_cn/admin/common.php ECSHOP管理中⼼共⽤语⾔⽂件--配置菜单显⽰名3,admin/includes/inc_priv.php ECSHOP权限对照表--将菜单action与权限绑定4,languages/zh_cn/admin/priv_action.php ECSHOP权限名称语⾔⽂件---配置权限显⽰的中⽂名主要数据表:ecs_admin_action这⾥⽤后台商品管理来说明这⼏个配置⽂件:权限:1.ecs_admin_action 管理员权限表。

权限以分组的形式存储,⾸先要添加⼀个权限管理的⼀级分组节点(此权限分组节点仅作为分组归类,没有实际权限控制作⽤),再添加所属的权限名。

配置摘要:+-----------+-----------+------------------+------------+| action_id | parent_id | action_code | relevance |+-----------+-----------+------------------+------------+| 1 | 0 | goods | || 21 | 1 | goods_manage | || 22 | 1 | remove_back | || 23 | 1 | cat_manage | || 24 | 1 | cat_drop | cat_manage || 25 | 1 | attr_manage | || 26 | 1 | brand_manage | || 27 | 1 | comment_priv | || 84 | 1 | tag_manage | || 70 | 1 | goods_type | || 94 | 1 | goods_auto | || 103 | 1 | virualcard | || 105 | 1 | picture_batch | || 106 | 1 | goods_export | || 107 | 1 | goods_batch | || 108 | 1 | gen_goods_script | |+-----------+-----------+------------------+------------+#第⼀条goods就是下⾯权限的⽗权限2.priv_action.php 权限名称语⾔⽂件。

权限管理模块设计

权限管理模块设计

权限管理模块设计我们⽐较常见的就是基于⾓⾊的访问控制,⽤户通过⾓⾊与权限进⾏关联。

简单地说,⼀个⽤户拥有多个⾓⾊,⼀个⾓⾊拥有多个权限。

这样,就构造成“⽤户-⾓⾊-权限”的授权模型。

在这种模型中,⽤户与⾓⾊之间、⾓⾊与权限之间,通常都是多对多的关系。

如下图:基于这个,得先了解⾓⾊到底是什么?我们可以理解它为⼀定数量的权限的集合,是⼀个权限的载体。

例如:⼀个论坛的“管理员”、“版主”,它们都是⾓⾊。

但是所能做的事情是不完全⼀样的,版主只能管理版内的贴⼦,⽤户等,⽽这些都是属于权限,如果想要给某个⽤户授予这些权限,不⽤直接将权限授予⽤户,只需将“版主”这个⾓⾊赋予该⽤户即可。

但是通过上⾯我们也发现问题了,如果⽤户的数量⾮常⼤的时候,就需要给系统的每⼀个⽤户逐⼀授权(分配⾓⾊),这是件⾮常繁琐的事情,这时就可以增加⼀个⽤户组,每个⽤户组内有多个⽤户,除了给单个⽤户授权外,还可以给⽤户组授权,这样⼀来,通过⼀次授权,就可以同时给多个⽤户授予相同的权限,⽽这时⽤户的所有权限就是⽤户个⼈拥有的权限与该⽤户所在组所拥有的权限之和。

⽤户组、⽤户与⾓⾊三者的关联关系如下图:通常在应⽤系统⾥⾯的权限我们把它表现为菜单的访问(页⾯级)、功能模块的操作(功能级)、⽂件上传的删改,甚⾄页⾯上某个按钮、图⽚是否可见等等都属于权限的范畴。

有些权限设计,会把功能操作作为⼀类,⽽把⽂件、菜单、页⾯元素等作为另⼀类,这样构成“⽤户-⾓⾊-权限-资源”的授权模型。

⽽在做数据表建模时,可把功能操作和资源统⼀管理,也就是都直接与权限表进⾏关联,这样可能更具便捷性和易扩展性。

如下图:这⾥特别需要注意以下权限表中有⼀列“PowerType(权限类型)”,我们根据它的取值来区分是哪⼀类权限,可以把它理解为⼀个枚举,如“MENU”表⽰菜单的访问权限、“OPERATION”表⽰功能模块的操作权限、“FILE”表⽰⽂件的修改权限、“ELEMENT”表⽰页⾯元素的可见性控制等。

Android权限列表permission说明(一)

Android权限列表permission说明(一)

Android权限列表permission说明(一)网络上不乏android权限列表,但是很少有将列表和使用方法放在一起的,所以特此总结一下需要在AndroidManifest.xml中定义相应的权限(以获取internet访问权限为例),如下:Xml代码1.< uses-permission android:name =”android.permission.INTERNET”/>注意在<application>也可以定义INTERNET权限,如下:Xml代码1.< application android:permission =”android.permissio n.INTERNET” >android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问"properties"表在checkin数据库中,改值可以修改上传( Allows read/write access to the "properties" table in the checkin database, to change values that get uploaded)android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location)android.permission.ACCESS_FINE_LOCATION允许一个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS)location)android.permission.ACCESS_LOCATION_EXTRA_COMMAND S允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands)android.permission.ACCESS_MOCK_LOCATION允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers for testing)android.permission.ACCESS_NETWORK_STATE允许程序访问有关GSM网络信息(Allows applications to access information about networks)android.permission.ACCESS_SURFACE_FLINGER允许程序使用SurfaceFlinger底层特性(Allows an application to use SurfaceFlinger's low level features)android.permission.ACCESS_WIFI_STATE允许程序访问Wi-Fi 网络状态信息(Allows applications to access information about Wi-Fi networks)android.permission.ADD_SYSTEM_SERVICE允许程序发布系统级服务(Allows an application to publish system-level services).android.permission.BATTERY_STATS允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics)android.permission.BLUETOOTH允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices) android.permission.BLUETOOTH_ADMIN允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices)android.permission.BRICK请求能够禁用设备(非常危险)(Required to be able to disable the device (very dangerous!).) android.permission.BROADCAST_PACKAGE_REMOVED允许程序广播一个提示消息在一个应用程序包已经移除后(Allows anapplication to broadcast a notification that an application package has been removed)android.permission.BROADCAST_STICKY.允许一个程序广播常用intents(Allows an application to broadcast sticky intents) android.permission.CALL_PHONE允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认(Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.) android.permission.CALL_PRIVILEGED允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认(Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed)android.permission.CAMERA请求访问使用照相设备(Required to be able to access the camera device. )android.permission.CHANGE_COMPONENT_ENABLED_STAT E允许一个程序是否改变一个组件或其他的启用或禁用(Allows an application to change whether an application component (other than its own) is enabled or not. )android.permission.CHANGE_CONFIGURATION允许一个程序修改当前设置,如本地化(Allows an application to modify the current configuration, such as locale. )android.permission.CHANGE_NETWORK_STATE允许程序改变网络连接状态(Allows applications to change network connectivity state)android.permission.CHANGE_WIFI_STATE允许程序改变Wi-Fi 连接状态(Allows applications to change Wi-Fi connectivity state) android.permission.CLEAR_APP_CACHE允许一个程序清楚缓存从所有安装的程序在设备中(Allows an application to clear the caches of all installed applications on the device. )android.permission.CLEAR_APP_USER_DATA允许一个程序清除用户设置(Allows an application to clear user data)android.permission.CONTROL_LOCATION_UPDATES允许启用禁止位置更新提示从无线模块(Allows enabling/disabling location update notifications from the radio. )android.permission.DELETE_CACHE_FILES允许程序删除缓存文件(Allows an application to delete cache files)android.permission.DELETE_PACKAGES允许一个程序删除包(Allows an application to delete packages)android.permission.DEVICE_POWER允许访问底层电源管理(Allows low-level access to power management)android.permission.DIAGNOSTIC允许程序RW诊断资源(Allows applications to RW to diagnostic resources. ) android.permission.DISABLE_KEYGUARD允许程序禁用键盘锁(Allows applications to disable the keyguard )android.permission.DUMP允许程序返回状态抓取信息从系统服务(Allows an application to retrieve state dump information from system services.)android.permission.EXPAND_STATUS_BAR允许一个程序扩展收缩在状态栏,Android开发网提示应该是一个类似Windows Mobile 中的托盘程序(Allows an application to expand or collapse the status bar. )android.permission.FACTORY_TEST作为一个工厂测试程序,运行在root用户(Run as a manufacturer test application, running as the root user. )android.permission.FLASHLIGHT访问闪光灯,Android开发网提示HTC Dream不包含闪光灯(Allows access to the flashlight ) android.permission.FORCE_BACK允许程序强行一个后退操作是否在顶层activities(Allows an application to force a BACK operation on whatever is the top activity. )android.permission.FOTA_UPDATE暂时不了解这是做什么使用的,Android开发网分析可能是一个预留权限.android.permission.GET_ACCOUNTS访问一个帐户列表在Accounts Service中(Allows access to the list of accounts in the Accounts Service)android.permission.GET_PACKAGE_SIZE允许一个程序获取任何package占用空间容量(Allows an application to find out the space used by any package. )android.permission.GET_TASKS允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等(Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.)android.permission.HARDWARE_TEST允许访问硬件(Allows access to hardware peripherals. )android.permission.INJECT_EVENTS允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,Android开发网提醒算是hook技术吧(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.)android.permission.INSTALL_PACKAGES允许一个程序安装packages(Allows an application to install packages. )android.permission.INTERNAL_SYSTEM_WINDOW允许打开窗口使用系统用户界面(Allows an application to open windows that are for use by parts of the system user interface. ) android.permission.INTERNET允许程序打开网络套接字(Allows applications to open network sockets)android.permission.MANAGE_APP_TOKENS允许程序管理(创建、催后、z-order默认向z轴推移)程序引用在窗口管理器中(Allows an application to manage (create, destroy, Z-order) applicationtokens in the window manager. )android.permission.MASTER_CLEAR目前还没有明确的解释,Android开发网分析可能是清除一切数据,类似硬格机android.permission.MODIFY_AUDIO_SETTINGS允许程序修改全局音频设置(Allows an application to modify global audio settings)android.permission.MODIFY_PHONE_STATE允许修改话机状态,如电源,人机接口等(Allows modification of the telephony state - power on, mmi, etc. )android.permission.MOUNT_UNMOUNT_FILESYSTEMS允许挂载和反挂载文件系统可移动存储(Allows mounting and unmounting file systems for removable storage. )android.permission.PERSISTENT_ACTIVITY允许一个程序设置他的activities显示(Allow an application to make its activities persistent. )android.permission.PROCESS_OUTGOING_CALLS允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls)android.permission.READ_CALENDAR允许程序读取用户日历数据(Allows an application to read the user's calendar data.) android.permission.READ_CONTACTS允许程序读取用户联系人数据(Allows an application to read the user's contacts data.) android.permission.READ_FRAME_BUFFER允许程序屏幕波或和更多常规的访问帧缓冲数据(Allows an application to take screen shots and more generally get access to the frame buffer data) android.permission.READ_INPUT_STATE允许程序返回当前按键状态(Allows an application to retrieve the current state of keys and switches. )android.permission.READ_LOGS允许程序读取底层系统日志文件(Allows an application to read the low-level system log files. )android.permission.READ_OWNER_DATA允许程序读取所有者数据(Allows an application to read the owner's data)android.permission.READ_SMS允许程序读取短信息(Allows an application to read SMS messages.)android.permission.READ_SYNC_SETTINGS允许程序读取同步设置(Allows applications to read the sync settings)android.permission.READ_SYNC_STATS允许程序读取同步状态(Allows applications to read the sync stats)android.permission.REBOOT请求能够重新启动设备(Required to be able to reboot the device. )android.permission.RECEIVE_BOOT_COMPLETED允许一个程序接收到ACTION_BOOT_COMPLETED广播在系统完成启动(Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. )android.permission.RECEIVE_MMS允许一个程序监控将收到MMS彩信,记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. ) android.permission.RECEIVE_SMS允许程序监控一个将收到短信息,记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.) android.permission.RECEIVE_WAP_PUSH允许程序监控将收到WAP PUSH信息(Allows an application to monitor incoming WAP push messages. )android.permission.RECORD_AUDIO允许程序录制音频(Allows an application to record audio)android.permission.REORDER_TASKS允许程序改变Z轴排列任务(Allows an application to change the Z-order of tasks) android.permission.RESTART_PACKAGES允许程序重新启动其他程序(Allows an application to restart other applications) android.permission.SEND_SMS允许程序发送SMS短信(Allowsan application to send SMS messages)android.permission.SET_ACTIVITY_WATCHER允许程序监控或控制activities已经启动全局系统中Allows an application to watch and control how activities are started globally in the system.android.permission.SET_ALWAYS_FINISH允许程序控制是否活动间接完成在处于后台时Allows an application to control whether activities are immediately finished when put in the background.android.permission.SET_ANIMATION_SCALE修改全局信息比例(Modify the global animation scaling factor.)android.permission.SET_DEBUG_APP配置一个程序用于调试(Configure an application for debugging.)android.permission.SET_ORIENTATION允许底层访问设置屏幕方向和实际旋转(Allows low-level access to setting the orientation (actually rotation) of the screen.)android.permission.SET_PREFERRED_APPLICATIONS允许一个程序修改列表参数PackageManager.addPackageT oPreferred() 和PackageManager.removePackageFromPreferred()方法(Allows an application to modify the list of preferred applications with the PackageManager.addPackageT oPreferred() and PackageManager.removePackageFromPreferred() methods.) android.permission.SET_PROCESS_FOREGROUND允许程序当前运行程序强行到前台(Allows an application to force any currently running process to be in the foreground.)android.permission.SET_PROCESS_LIMIT允许设置最大的运行进程数量(Allows an application to set the maximum number of (not needed) application processes that can be running. ) android.permission.SET_TIME_ZONE允许程序设置时间区域(Allows applications to set the system time zone)android.permission.SET_WALLPAPER允许程序设置壁纸(Allows applications to set the wallpaper )android.permission.SET_WALLPAPER_HINTS允许程序设置壁纸hits(Allows applications to set the wallpaper hints) android.permission.SIGNAL_PERSISTENT_PROCESSES允许程序请求发送信号到所有显示的进程中(Allow an application to request that a signal be sent to all persistent processes) android.permission.STATUS_BAR允许程序打开、关闭或禁用状态栏及图标Allows an application to open, close, or disable the status bar and its icons.android.permission.SUBSCRIBED_FEEDS_READ允许一个程序访问订阅RSS Feed内容提供(Allows an application to allow access the subscribed feeds ContentProvider. )android.permission.SUBSCRIBED_FEEDS_WRITE系统暂时保留改设置,Android开发网认为未来版本会加入该功能。

Windows 用户帐户权限设置详解

Windows 用户帐户权限设置详解

Windows XP用户帐户权限设置详解1:标准用户该用户可修改大部分计算机设制,安装不修改操作系统文件且不需要安装系统服务的应用程序,创建和管理本地用户帐户和组,启动或停止默认情况下不启动的服务,但不可访问NTFS分区上属于其他用户的私有文件.2:受限用户该用户可操作计算机并保存文档,但不可以安装程序或进行可能对系统文件和设置有潜在的破坏性的任何修改.3:其他用户(1)系统***--有对计算机的完全访问控制权.(2)备份操作员不能根改安全性设置(3)客人--权限同受限用户(4)高级用户--权限同标准用户在XP中设置用户权限按照一下步骤进行:进入"控制面板",在"控制面板"中双击"管理工具"打中开"管理工具",在"管理工具"中双击"计算机管理"打开"计算机管理"控制台,在"计算机管理"控制台左面窗口中双击"本地用户和组",再单下面的"用户",右面窗口即显示此计算机上的所有用户。

要更改某用户信息,右击右面窗口的该用户的图标,即弹出快捷菜单,该菜单包括:设置密码、删除、重命名、属性、帮助等项,单击设置密码、删除、重命名等项可进行相应的操作。

单击属性弹出属性对话框,“常规”选项卡可对用户密码安全,帐户的停锁等进行设置,“隶属于”选项卡可改变用户组,方法如下:先选中下面列表框中的用户,单击“删除”按纽,如此重复删除列表中的所有用户,单击“添加”按纽,弹出“选择组”对话柜,单击“高级”按纽,单击“立即查找”按纽,下面列表框中列出所有的用户组,Administrators组为***组(其成员拥有所有权限),Power Users组为超级用户组(其成员拥有除计算机管理以外的所有权限,可安装程序),User组为一般用户组(其成员只执行程序,不能安装和删程序)。

权限管理的三级菜单的流程及使用

权限管理的三级菜单的流程及使用

权限管理的三级菜单的流程及使⽤权限管理的三级菜单的流程及使⽤权限控制url代表了权限表结构(6张表,ORM创建4个类,两个many2many会⾃动再⽣成两张表)⽤户表⽤户名密码多对多 roles(⾓⾊)⾓⾊表标题 title多对多 permission(权限)权限表标题 title权限 urlURL别名 name - 设置唯⼀(⽅便为了将权限粒度控制到按钮级别)外键 menu(菜单)外键 permission(self⾃⼰)菜单表标题 title图标 icon权重 weight⽤户和⾓⾊关系表⾓⾊和权限的关系表from django.db import modelsclass Menu(models.Model):"""⼀级菜单"""title = models.CharField(max_length=32, verbose_name='标题', unique=True) # ⼀级菜单的名字icon = models.CharField(max_length=32, verbose_name='图标', null=True, blank=True)weight = models.IntegerField(verbose_name='权重', default=1)class Meta:verbose_name_plural = '菜单表'verbose_name = '菜单表'def __str__(self):return self.titleclass Permission(models.Model):"""权限表有关联Menu的⼆级菜单没有关联Menu的不是⼆级菜单,是不可以做菜单的权限"""title = models.CharField(max_length=32, verbose_name='标题')url = models.CharField(max_length=32, verbose_name='权限')menu = models.ForeignKey('Menu', null=True, blank=True, verbose_name='菜单')# 该权限关联的其他权限是否也是在当前url上展⽰parent = models.ForeignKey(to='Permission', null=True, blank=True, verbose_name='⽗权限')name = models.CharField(max_length=32, null=True, blank=True, unique=True, verbose_name='权限的别名') class Meta:verbose_name_plural = '权限表'verbose_name = '权限表'def __str__(self):return self.titleclass Role(models.Model):name = models.CharField(max_length=32, verbose_name='⾓⾊名称')permissions = models.ManyToManyField(to='Permission', verbose_name='⾓⾊所拥有的权限', blank=True) def __str__(self):return class User(models.Model):"""⽤户表"""name = models.CharField(max_length=32, verbose_name='⽤户名')password = models.CharField(max_length=32, verbose_name='密码')roles = models.ManyToManyField(to='Role', verbose_name='⽤户所拥有的⾓⾊', blank=True)def __str__(self):return 流程梳理- 当⼀个url回车发出这个请求后,给到server端先判断这个请求url是不是有访问的权限这个时候我们设置了⽩名单(在中间件这⾥(因为⼀开始就要判断⾝份)),如果是⽩名单谁都可以访问eg:MENU_SESSION_KEY = 'menus'WHITE_URL_LIST = [r'^/login/$',r'^/logout/$',r'^/reg/$',r'^/admin/.*',]- 这时⽤户登录,如果登录成功不同的⽤户对应不同的权限,也就是可以访问不同的url- 登录成功,(权限信息的初始化)我们该做的就是拿到这个⽤户对应的权限信息 - ORM(⽤户信息-⾓⾊-权限-菜单)# user = er.objects.filter(name=username, password=pwd).first()permission_query = user.roles.filter(permissions__url__isnull=False).values('permissions__url', # 权限url'permissions__title', # 权限的标题'permissions__id', # 权限的id'permissions__name', # 权限的别名'permissions__parent_id', # 此权限对应的⽗权限的id'permissions__parent__name', # 次权限对应的⽗权限的别名'permissions__menu_id', # 此权限对应的菜单id'permissions__menu__title', # 此权限对应的菜单标题'permissions__menu__icon', # 此权限对应的菜单的图标'permissions__menu__weight', # 表单排序⽤的).distinct()数据结构(字典)permission_dict来存储此权限信息menu_dict来存储菜单信息permission_dict = {'URL的别名':{'url','title','id','pid','pname' }}menu_list = {'菜单ID':{'title': ⼀级菜单的标题,'icon': ⼀级菜单的图标,'weight': 权重,'children': [{'url','title','id',}]}}权限信息存的就是:当前这个权限的是谁,他的id多少,他的标题是什么,他的⽗权限是谁(id),他的⽗权限的别名是什么菜单信息存的就是:这个权限(url)对应的菜单的标题是什么,菜单的图标是什么,权重是多少,他对应的⼆级菜单是哪些⼆级菜单(children)也就是,对应的权限信息这⾥⾯存的也就是他的权限信息(他的title,url,id,parent_id)将所有的权限遍历⼀遍后,将这些信息存⼊session中为什么存⼊session,是因为session可以配置(放⼊缓存,访问次数⽐较多,所有存到缓存⽐较好)# 遍历此⽤户对应的权限信息for item in permission_query:# ⾸先是权限信息,以权限的别名为键permission_dict[item['permissions__name']] = ({'url': item['permissions__url'],'id': item['permissions__id'],'parent_id': item['permissions__parent_id'],'parent_name': item['permissions__parent__name'],'title': item['permissions__title'],})menu_id = item.get('permissions__menu_id')if not menu_id:continueif menu_id not in menu_dict:menu_dict[menu_id] = {'title': item['permissions__menu__title'],'icon': item['permissions__menu__icon'],'weight': item['permissions__menu__weight'],'children': [{'title': item['permissions__title'],'url': item['permissions__url'],'id': item['permissions__id'],'parent_id': item['permissions__parent_id'],}]}else:menu_dict[menu_id]['children'].append({'title': item['permissions__title'],'url': item['permissions__url'],'id': item['permissions__id'],'parent_id': item['permissions__parent_id'],})- 登录成功后,信息存⼊session后,这时给服务器发送⼀个请求,这时就会⾛中间件进⾏权限的校验- ⾛中间件process_request(self, request):- 先获取这个请求的url request.path_info刚开始也先判断⽩名单,⽩名单不符合从session中获取这个⽤户存的权限信息permission_dict = request.session.get(settings.PERMISSION_SESSION_KEY)- 导航栏可以存这⾥ - 写了⼀个inclution_tag来处理request.breadcrumd_list = [{"title": '⾸页', 'url': '#'},]@register.inclusion_tag('rbac/breadcrumbs.html')def breadcrumb(request):return {"breadcrumd_list": request.breadcrumd_list}- 遍历这个权限信息可以通过正则匹配,匹配他是不是该⽤户的权限如果匹配成功看他是否由parent_id有是⼦权限没有是⽗权限if parent_id:# 表⽰当前权限是⼦权限,让⽗权限是展开request.current_menu_id = parent_idrequest.breadcrumd_list.extend([{"title": permission_dict[parent_name]['title'],'url': permission_dict[parent_name]['url']},{"title": item['title'], 'url': item['url']},])else:# 表⽰当前权限是⽗权限,要展开的⼆级菜单request.current_menu_id = id# 添加⾯包屑导航request.breadcrumd_list.append({"title": item['title'],'url': item['url']})- request.current_menu_id这个就是⽤来展⽰菜单和展⽰该权限的⼦权限为了选中同⼀个⼆级菜单的时候⽤的-写⼀个includtion_tag-@register.inclusion_tag('rbac/menu.html')def menu(request):menu_list = request.session.get(settings.MENU_SESSION_KEY)order_dict = OrderedDict()for key in sorted(menu_list, key=lambda x: menu_list[x]['weight'], reverse=True): order_dict[key] = menu_list[key]item = order_dict[key]item['class'] = 'hide'for i in item['children']:if i['id'] == request.current_menu_id:i['class'] = 'active'item['class'] = ''return {"menu_list": order_dict}from django.utils.deprecation import MiddlewareMixinfrom django.conf import settingsfrom django.shortcuts import HttpResponseimport reclass PermissionMiddleware(MiddlewareMixin):def process_request(self, request):# 对权限进⾏校验# 1. 当前访问的URLcurrent_url = request.path_info# ⽩名单的判断for i in settings.WHITE_URL_LIST:if re.match(i, current_url):return# 2. 获取当前⽤户的所有权限信息permission_dict = request.session.get(settings.PERMISSION_SESSION_KEY)request.breadcrumd_list = [{"title": '⾸页', 'url': '#'},]# 3. 权限的校验print(current_url)for item in permission_dict.values():print(permission_dict)url = item['url']if re.match("^{}$".format(url), current_url):parent_id = item['parent_id']id = item['id']parent_name = item['parent_name']if parent_id:# 表⽰当前权限是⼦权限,让福权限是展开request.current_menu_id = parent_idrequest.breadcrumd_list.extend([{"title": permission_dict[parent_name]['title'],'url': permission_dict[parent_name]['url']},{"title": item['title'], 'url': item['url']},])else:# 表⽰当前权限是福权限,要展开的⼆级菜单request.current_menu_id = id# 添加⾯包屑导航request.breadcrumd_list.append({"title": item['title'], 'url': item['url']})returnelse:return HttpResponse('没有权限')- 权限⼒度控制到按钮级别⼀个filter⼀个url的反向解析@register.filterdef has_permission(request, permission):# session中存的就是权限的别名,别名就是反向解析的那个字符串if permission in request.session.get(settings.PERMISSION_SESSION_KEY):return True{% if request|has_permission:'web:customer_edit' or request|has_permission:'web:customer_del' %}<td>{% if request|has_permission:'web:customer_edit' %}<a style="color: #333333;" href="{% url 'web:customer_edit' row.id %}"><i class="fa fa-edit" aria-hidden="true"></i></a>{% endif %}{% if request|has_permission:'web:customer_del' %}<a style="color: #d9534f;" href="{% url 'web:customer_del' row.id %}"><i class="fa fa-trash-o"></i></a>{% endif %}菜单和权限的展⽰在⼀个页⾯# 菜单和权限的展⽰# 点击每⼀个菜单出现对应的权限信息def menu_list(request):all_menu = models.Menu.objects.all()# 拿到菜单对应的菜单idmid = request.GET.get('mid')# 如果拿到菜单id代表着有⼦权限if mid:# 从⼦权限出发拿到⽗权限对应的菜单id对应的权限或者菜单对应的权限(也就是⼆级菜单)因为⾃⼰关联⾃⼰(从⽗亲和⼉⼦两⽅⾯出发) permission_query = models.Permission.objects.filter(Q(menu_id=mid) | Q(parent__menu_id=mid))# 如果没有菜单id则输出所有的权限信息else:permission_query = models.Permission.objects.all()# 拿到查询出的权限对应的信息all_permission = permission_query.values('id', 'url', 'title', 'name', 'menu_id', 'parent_id', 'menu__title')all_permission_dict = {}for item in all_permission:menu_id = item.get('menu_id')# 找到有菜单id的权限,将其存⼊字典,键为权限的idif menu_id:all_permission_dict[item['id']] = item# 可以改都是引⽤# 得到所有有菜单的权限后,将每⼀个权限都设置⼀个children键值对,⽤来存储⼦权限信息 item['children'] = []for item in all_permission:pid = item.get('parent_id')# 如果有⽗id代表的是⼦权限if pid:# 如果是⼦权限,就将⼦权限的信息存⼊多上⼀步做的处理(有菜单的⽗权限)children中 all_permission_dict[pid]['children'].append(item)return render(request, 'rbac/menu_list.html', {"mid": mid,"all_menu": all_menu,"all_permission_dict": all_permission_dict,})权限系统的应⽤拷贝rbac App到新项⽬中注册APP 以及配置信息# ###### 权限相关的配置 ######PERMISSION_SESSION_KEY = 'permissions'MENU_SESSION_KEY = 'menus'WHITE_URL_LIST = [r'^/login/$',r'^/logout/$',r'^/reg/$',r'^/admin/.*',]数据库迁移命令删除rbac所有的迁移⽂件执⾏两条命令路由相关url(r'rbac/',include('rbac.urls',namespace='rbac'))给所有的URL起名字layout 模板注意block css js content权限的管理添加⾓⾊添加菜单添加权限分配权限⽤户关联---修改原系统的⽤户表跟rbac的UserInfo user = models.OneToOneField(UserInfo,null=True,blank=True)给⽤户分⾓⾊给⾓⾊分权限登录应⽤权限登录成功后auth.login(request, obj)ret = init_permission(request, obj)if ret:return ret初始化权限信息init_permission函数中修改user -> erpermission_query = er.roles.filter应⽤权限校验中间件'rbac.middleware.rbac.PermissionMiddleware',应⽤左侧菜单和⾯包屑导航在layout模板中,引⽤CSS和JS⼆级菜单{% load rbac %}{% menu request %}应⽤路径导航{% breadcrumb request %}权限控制到按钮级别{% load rbac %}判断 filter 判断⾥⾯只能⽤filter 只能⼀个⼀个判断{% load rbac %}{% if request|has_permission:'add_customer' %}<a href="{% url 'add_customer' %}?{{ query_params }}" class="btn btn-primary btn-sm">添加</a>{% endif %}使⽤注意事项⽤户注册后对应在rbac中的UserInfo创建⽤户和原系统的⽤户做⼀对⼀关联菜单⽗权限⼦权限的层级关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用户菜单权限列表
角色:企业普通用户
登录时进入普通用户首页
菜单项:仅有以下菜单,其它都没有
●设置
⏹修改密码
⏹单点登录设置
角色:企业超级管理员
登录时进入安全管理——用户管理页面
菜单项:仅有以下菜单,其它都没有
●安全管理全部
●设置
⏹企业基本信息
⏹修改密码
角色:企业管理员
登录时先进入普通用户首页,点击右上角管理员按钮后,进入管理员首页菜单项:
●无安全管理——管理员管理
●无经销商管理全部
●无设置——企业基本信息
●其它都有
角色:一级经销商
登录时进入经销商首页
菜单项:
●无安全管理全部
●无设置——单点登录设置
●其它都有
角色:二级经销商
登录时进入经销商首页
菜单项:
●无安全管理全部
●无经销商管理——二级经销商管理
●无设置——单点登录设置
●其它都有。

相关文档
最新文档