aipoは管理者画面で様々なポートレットで扱われる共通機能のアクセス権限を設定することができます。
それぞれのポートレットに対してどのようにアクセス権限(一覧表示、更新、削除、等)を割り当てるか説明します。
データベース
アクセス権限の決定に使用するデータは
eip_t_acl_portlet_featureテーブルのacl_typeフィールド(integer)
eip_t_acl_roleのacl_typeフィールド(integer)
の数字のみです.
それぞれ、詳細画面かフォーム画面かの使用等で異なります。
実装
//使用するアクセス権限を決定するメソッド protected Object getResultData(EipTAclRole obj) { try { EipTAclRole record = obj; AccessControlResultData rd = new AccessControlResultData(); // アクセス権限 int tmpAclType = record.getAclType(); if (hasAcl(ALAccessControlConstants.VALUE_ACL_LIST, tmpAclType)) { rd.setAclList(true); } if (hasAcl(ALAccessControlConstants.VALUE_ACL_DETAIL, tmpAclType)) { rd.setAclDetail(true); } if (hasAcl(ALAccessControlConstants.VALUE_ACL_INSERT, tmpAclType)) { rd.setAclInsert(true); } if (hasAcl(ALAccessControlConstants.VALUE_ACL_UPDATE, tmpAclType)) { rd.setAclUpdate(true); } if (hasAcl(ALAccessControlConstants.VALUE_ACL_DELETE, tmpAclType)) { rd.setAclDelete(true); } if (hasAcl(ALAccessControlConstants.VALUE_ACL_EXPORT, tmpAclType)) { rd.setAclExport(true); } } catch (Exception e) { } return rd; } private boolean hasAcl(int defineAclType, int aclType) { return ((aclType & defineAclType) == defineAclType); }
定数は以下です
/** アクセス権(一覧表示) */ public static final int VALUE_ACL_LIST = 1; /** アクセス権(詳細表示) */ public static final int VALUE_ACL_DETAIL = 2; /** アクセス権(追加) */ public static final int VALUE_ACL_INSERT = 4; /** アクセス権(更新) */ public static final int VALUE_ACL_UPDATE = 8; /** アクセス権(削除) */ public static final int VALUE_ACL_DELETE = 16; /** アクセス権(外部出力) */ public static final int VALUE_ACL_EXPORT = 32;
ビット演算子による比較を行うことで、ただの自然数であるacl_typeが複数のブール情報を持つことが出来ます。
例
acl_type = 31の場合
acl_type = 31 31 = 16 + 8 + 4 + 2 + 1
であるので
acl_type
は
- 一覧表示
- 詳細表示
- 追加
- 更新
- 削除
の機能を持ちます
acl_type = 19の場合
acl_type = 19 19 = 16 + 2 + 1
であるので
acl_type
は
- 一覧表示
- 詳細表示
- 削除
の機能を持ちます