CRM權限管理
權限管理就是管理使用者對於資源的操作。本CRM 系統的權限(也稱為資源)是基於角色操作權限來實現的,也就是RBAC(Role-Based Access Control,基於角色的存取控制),就是使用者透過角色與權限進行關聯。簡單地說,一個使用者擁有若干角色,每個角色擁有若干權限。這樣,就建構成「使用者-角色-權限」的授權模型。在這個模型中,使用者與角色之間,角色與權限之間都是多對多的關係,為了實現表之間多對多的關係,必須將一個多對多的關係透過一個中間表分為兩個一對多的關係。因此引入中間表,使用者角色表和角色權限表。
權限管理模組共涉及五張表:
#三張主表 a) 使用者表(t_user)、
. 資源表(t_module)、
2.兩張中間表
a) 使用者角色表(
模組CRUD:操作t_module表
角色CRUD:操作t_role表##
## 用戶CRUD:操作t_role表2、授權
角色賦予權限
給予角色權限:使用ztree進行權限樹結構的建構
a)賦權限
# 2、綁定父模組;
3、綁定子模組
1、先刪除本模組;
2、刪除子模組;
# 3
33 、刪除父模組(判斷父模組是否有其他的子模組關聯詞角色,如果沒有就取消,如果有就關聯)a) 使用jQuery的插件zTree建構一個資源的樹狀結構,樹中的內容為表t_module
#中的資料
# b) 用滑鼠點選zTree中的選擇框操作表t_permission(角色資源表)
#實作給角色賦予權限
建立使用者或是修改使用者資訊時都可以透過combobox多重選取框給使用者賦予角色動作 t_user_role(使用者角色表)
# 從t_permission表中取得權限值(acl_value)與頁面傳來的值或與註解中明確的權限值比較,以下提供兩種思路:
1.頁面傳遞過來Request.getParameter(“permission”);比對根據userId查詢資料庫查到的權限清單 contains
2.透過註解明確模組權限值:@requirePermission(permission=”1010”;
取得使用者權限存入session,然後使用者操作資源時會提交一個資源的權限值,在判斷使用者是否包含有此權限
使用Spring AOP進行攔截認證
第一步:開啟註解驅動105e5fee2b26183b5a4971ef66506fa5##努標籤
第步驟三:定義一個切入點@Pointcut(" *execution('com.shsxt.controller.*.*((..))')")
public void pointcut() {}
第四步:寫出一個增強:@Around(value="pointcut()")
2.使用使用者權限 # 造成以來的權限校驗 5.以「返回」
//@Pointcut("execution(* com.shsxt.controller.*.*(..))") @Pointcut("@annotation(com.shsxt.annotation.RequirePermissions)") public void pointcut() { }###透過前台傳遞permission參數實現: ###
List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(","))); String permissioFront = request.getParameter("permission"); // 后台权限认证 AssertUtil.isTrue(!permissions.contains(permissioFront), "您无权操作此模块");###透過註解實現###
List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(","))); if (requirePermissions != null) { String permission = requirePermissions.permission(); // 后台权限认证 throw new UnAuthPermissionException(permission, "您无权操作此模块"); }#### #################### 3.引入AOP的namepsace並開啟AOP註解驅動###### ######
<!-- 启用@Aspect注解 --> <aop:aspectj-autoproxy />### 4.在需要權限認證的方法上啟用註解 ###### ############################################# ###Permission應該和module表中的act_value保持一致###### #######前台認證:Freemarker 內建函數判斷#######取得使用者權限後在前端的freemarker中利用freemarker語法去判斷使用者是否能夠操作此資源(list?seq_contains('權限值'))#######1.SQL:###
SELECT DISTINCT p.acl_value FROM t_permission p -- LEFT JOIN t_role r ON r.id = ur.role_id left JOIN t_user_role ur on p.role_id = ur.role_id WHERE ur.user_id = 10;###2.在AOP切面類別中查詢permission取出權限值列表、放入Session###### #########3. 前台頁面判斷:解釋:利用freemarker 內建函數sql_contains判斷序列是否包含參數值,包含回傳true######類似於java中集合hashmap.contains(value);###### #######
以上是Java的授權與認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!