首頁 > Java > java教程 > Java的授權與認證

Java的授權與認證

炎欲天舞
發布: 2017-08-04 10:57:56
原創
2014 人瀏覽過

CRM權限管理

一、概念

權限管理就是管理使用者對於資源的操作。本CRM 系統的權限(也稱為資源)是基於角色操作權限來實現的,也就是RBAC(Role-Based Access Control,基於角色的存取控制),就是使用者透過角色與權限進行關聯。簡單地說,一個使用者擁有若干角色,每個角色擁有若干權限。這樣,就建構成「使用者-角色-權限」的授權模型。在這個模型中,使用者與角色之間,角色與權限之間都是多對多的關係,為了實現表之間多對多的關係,必須將一個多對多的關係透過一個中間表分為兩個一對多的關係。因此引入中間表,使用者角色表和角色權限表。

二、資料庫

權限管理模組共涉及五張表

#三張主表

    a)       使用者表(t_user)、

   .  資源表(t_module)、

         2.兩張中間表

    a)       使用者角色表( 

 

 

 

#三、權限管理實作

 

1、模組、角色、使用者的單表CRUD

  模組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插入記錄

                     b).於上使用帳號:先刪除,請於新增##### ##### ##### ##### ##### ##### ##### ##### ###

建立使用者或是修改使用者資訊時都可以透過combobox多重選取框給使用者賦予角色動作 t_user_role(使用者角色表)

 

3、認證

#  從t_permission表中取得權限值(acl_value)與頁面傳來的值或與註解中明確的權限值比較,以下提供兩種思路:

    1.頁面傳遞過來Request.getParameter(“permission”);比對根據userId查詢資料庫查到的權限清單  contains

    2.透過註解明確模組權限值:@requirePermission(permission=”1010”;

#後台認證:Spring AOP和自訂註解實作認證

  取得使用者權限存入session,然後使用者操作資源時會提交一個資源的權限值,在判斷使用者是否包含有此權限

  使用Spring AOP進行攔截認證

                 第一步:開啟註解驅動##努標籤

                 第步驟三:定義一個切入點@Pointcut(" *execution('com.shsxt.controller.*.*((..))')")

                    public void pointcut() {}

                 第四步:寫出一個增強:@Around(value="pointcut()")

     

                       2.使用使用者權限

#                               造成以來的權限校驗

                       5.以「返回」

 

### #####自訂註解############ ######### ######         2.寫出切面類別#######定義切入點:自攔截有權限註解的方法,更能提升效能###
//@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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板