CRM権限管理
権限管理は、リソースに対するユーザーの操作を管理することです。この CRM システムの権限 (リソースとも呼ばれます) は、ロール操作権限、つまり RBAC (Role-Based Access Control、ロールベースのアクセス制御) に基づいて実装されます。これは、ユーザーがロールを通じて権限に関連付けられることを意味します。簡単に言うと、ユーザーには複数の役割があり、各役割には複数の権限があります。このようにして、「ユーザー-ロール-権限」認可モデルが構築されます。このモデルでは、ユーザーとロールの間、およびロールと権限の間に多対多の関係があり、テーブル間の多対多の関係を実現するには、多対多の関係を 2 つに分割する必要があります。対多の関係。したがって、中間テーブル、ユーザー ロール テーブル、およびロール権限テーブルが導入されます。
権限管理モジュールには、合計5つのテーブル:
3つのメインテーブル
a) ユーザーテーブル(t_user)、
b )役割テーブル ( t_role)、
现 III. 永続管理 実績权
1、モジュール、キャラクター、ユーザーの単一テーブル CRUD
文字 CRUD: t_role テーブルを操作
ユーザー CRUD: 操作: 操作 t_role テーブル 2. 認可 ロールに権限を付与 権限を付与役割:Ztreeを使用して、このモジュールをバインドしますmodule (親モジュールに他のサブモジュールに関連付けられた単語の役割があるかどうかを判断し、ない場合はキャンセルし、存在する場合は関連付けます) a) jQuery プラグイン zTree を使用してリソースのツリー構造を構築します。ツリーの内容は、テーブル t_module のです
データ
b) マウスを使用して zTree の選択ボックスをクリックして、
テーブル t_permission (ロール リソース)表) ロールへの権限の付与を実装する
ユーザーがロールを割り当てる ユーザーにロールを与える: ComboBox の複数の選択肢を使用する
A) アカウント番号を t_user_role に直接追加する
b) を変更します。アカウント: まず削除してから追加します
🎜 🎜
ユーザーの作成またはユーザー情報の変更時に、コンボボックス複数選択ボックスを使用して、ユーザーにロール操作を割り当てることができますt_user_role (ユーザーロールテーブル)
のアイデア :
t_permission テーブルからアクセス許可の値 (acl_value) を取得し、ページによって渡された値、またはアノテーションで指定されたアクセス許可の値と比較します。
1.ページは Request.getParameter("permission") を渡します ; userId に基づいてデータベースにクエリして見つかった権限リストを比較します
2. アノテーションを通じてモジュールの権限値を明確にします: @requirePermission(permission="1010";
ユーザーの取得 パーミッションはセッションに保存され、ユーザーがリソースを操作するときにリソースパーミッション値が送信され、ユーザーがこのパーミッションを持っているかどうかが判断されます。 Spring AOPをインターセプト認証に使用します。 。 -終了ページ判定
4. バックグラウンド権限検証
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), "您无权操作此模块");
3. AOP AOP ネームスペースの導入と AOP アノテーション ドライバーを有効にします
List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(","))); if (requirePermissions != null) { String permission = requirePermissions.permission(); // 后台权限认证 throw new UnAuthPermissionException(permission, "您无权操作此模块"); }
パーミッションはモジュールテーブルのact_valueと一致する必要があります
🎜 フロントエンド認証: Freemark組み込み関数の決定🎜🎜 ユーザーパーミッションを取得した後、フロントエンドでfreemark構文を使用しますユーザーがこのリソースを操作できるかどうかを判断するための freemarker (list?seq_contains('permission value'))🎜🎜1.SQL:🎜
<!-- 启用@Aspect注解 --> <aop:aspectj-autoproxy />
以上がJavaの認可と認証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。