Apache Shiro - 自定义 jdbc 领域 - 阅读 roles/permissions
Apache Shiro - custom jdbc Realm - reading roles/permissions
我正在将 Apache Shiro 实施到我的 Web 应用程序中,但在开始时遇到了问题。
我想从 postgreSQL 数据库加载角色和权限,并执行检查用户是否具有 role/permission。
我的角色权限系统包括以下内容:
用户 -> 有角色(可能有多个)
角色 -> 拥有权限(可能有多个)
角色可以分配给多个用户&权限可以分配给多个角色
用户角色分配始终与其他两个条件相关:
- 一个组织单位(在我的例子中称为 OE)
- 教员
所以基本上用户 "Faculty-Admin" 可能有以下内容:
- OE-Admin 角色,拥有 OE 的所有权限:3 和 Faculty:staff
所以他可以说 'manage_Users' of Faculty 'staff' of OE '3'
我知道如何在 shiro.ini 文件中实现角色,但由于我的 roles/rights(权限)在数据库中,我需要从那里加载它们。
Shiro 的快速入门示例中有以下示例:
# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
# license plate 'eagle5' (instance specific id)
goodguy = winnebago:drive:eagle5
如果我将这个例子应用到我的情况中,我会得到以下结果:
# The 'OE-Admin' role is allowed to 'manage_users' of OE '3' (type) with
# faculty 'staff'
OE-Admin = 3:manage_users:staff
所以我的角色定义是这样的:
角色 = OE:Right:Faculty(或按顺序更改它们,真的很重要)
现在最大的问题是:我怎样才能从我的数据库中 "load" 我的 roles/rights 获得具有权限的角色的这种规定格式?
到目前为止我里面有以下内容 shiro.ini:
ds = org.postgresql.Driver
ds.serverName = localhost
ds.user = admin
ds.password = admin
ds.databaseName = db_name
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $ds
jdbcRealm.permissionsLookupEnabled = true
我知道必须有一个像 "jdbcRealm.userRolesQuery = SELECT ...." 这样的条目
但我不知道如何按照我上面所说的方式加载角色。
它只是 .ini 文件的一个条目,相当于这样的静态角色集:goodguy = winnebago:drive:eagle5
或者需要哪些步骤才能实现?
任何人有更多的 Apache Shiro 经验可以帮助我吗?
那里有一些教程,但我发现很难按照它们来创建具有 owm 角色和权限的自定义 jdbc 领域。
编辑:
数据库结构:
用户:
id serial NOT NULL,
"user" character varying(50) NOT NULL,
CONSTRAINT umgmt_users_pkey PRIMARY KEY (id)
角色:
id serial NOT NULL,
role character varying(50) NOT NULL,
priv_level integer NOT NULL,
CONSTRAINT umgmt_roles_pkey PRIMARY KEY (id)
权利(权限):
id serial NOT NULL,
"right" character varying(50) NOT NULL,
CONSTRAINT umgmt_rights_pkey PRIMARY KEY (id)
为了以防万一,这是我的 table 我存储 User-Role-OE-Fac 关系的地方
id serial NOT NULL,
user_id integer NOT NULL,
oe_id integer NOT NULL,
fac_id integer NOT NULL,
role_id integer NOT NULL,
assigned_by_priv_level integer NOT NULL,
CONSTRAINT umgmt_user_oe_fac_role_pkey PRIMARY KEY (id),
CONSTRAINT fac_fkey FOREIGN KEY (fac_id)
REFERENCES umgmt_facultys (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT oe_fkey FOREIGN KEY (oe_id)
REFERENCES umgmt_oes (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT role_fkey FOREIGN KEY (role_id)
REFERENCES umgmt_roles (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT user_fkey FOREIGN KEY (user_id)
REFERENCES umgmt_users (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
好的,经过与 RevXaisks 的长时间讨论后,我会再睡一晚,但我认为 Shiro 在 Role/Permisson 检查方面不符合我的需求。
非常感谢兄弟,你这么有耐心。
我正在将 Apache Shiro 实施到我的 Web 应用程序中,但在开始时遇到了问题。
我想从 postgreSQL 数据库加载角色和权限,并执行检查用户是否具有 role/permission。
我的角色权限系统包括以下内容:
用户 -> 有角色(可能有多个)
角色 -> 拥有权限(可能有多个)
角色可以分配给多个用户&权限可以分配给多个角色
用户角色分配始终与其他两个条件相关:
- 一个组织单位(在我的例子中称为 OE)
- 教员
所以基本上用户 "Faculty-Admin" 可能有以下内容:
- OE-Admin 角色,拥有 OE 的所有权限:3 和 Faculty:staff
所以他可以说 'manage_Users' of Faculty 'staff' of OE '3'
我知道如何在 shiro.ini 文件中实现角色,但由于我的 roles/rights(权限)在数据库中,我需要从那里加载它们。
Shiro 的快速入门示例中有以下示例:
# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
# license plate 'eagle5' (instance specific id)
goodguy = winnebago:drive:eagle5
如果我将这个例子应用到我的情况中,我会得到以下结果:
# The 'OE-Admin' role is allowed to 'manage_users' of OE '3' (type) with
# faculty 'staff'
OE-Admin = 3:manage_users:staff
所以我的角色定义是这样的:
角色 = OE:Right:Faculty(或按顺序更改它们,真的很重要)
现在最大的问题是:我怎样才能从我的数据库中 "load" 我的 roles/rights 获得具有权限的角色的这种规定格式?
到目前为止我里面有以下内容 shiro.ini:
ds = org.postgresql.Driver
ds.serverName = localhost
ds.user = admin
ds.password = admin
ds.databaseName = db_name
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $ds
jdbcRealm.permissionsLookupEnabled = true
我知道必须有一个像 "jdbcRealm.userRolesQuery = SELECT ...." 这样的条目 但我不知道如何按照我上面所说的方式加载角色。
它只是 .ini 文件的一个条目,相当于这样的静态角色集:goodguy = winnebago:drive:eagle5
或者需要哪些步骤才能实现?
任何人有更多的 Apache Shiro 经验可以帮助我吗? 那里有一些教程,但我发现很难按照它们来创建具有 owm 角色和权限的自定义 jdbc 领域。
编辑: 数据库结构:
用户:
id serial NOT NULL,
"user" character varying(50) NOT NULL,
CONSTRAINT umgmt_users_pkey PRIMARY KEY (id)
角色:
id serial NOT NULL,
role character varying(50) NOT NULL,
priv_level integer NOT NULL,
CONSTRAINT umgmt_roles_pkey PRIMARY KEY (id)
权利(权限):
id serial NOT NULL,
"right" character varying(50) NOT NULL,
CONSTRAINT umgmt_rights_pkey PRIMARY KEY (id)
为了以防万一,这是我的 table 我存储 User-Role-OE-Fac 关系的地方
id serial NOT NULL,
user_id integer NOT NULL,
oe_id integer NOT NULL,
fac_id integer NOT NULL,
role_id integer NOT NULL,
assigned_by_priv_level integer NOT NULL,
CONSTRAINT umgmt_user_oe_fac_role_pkey PRIMARY KEY (id),
CONSTRAINT fac_fkey FOREIGN KEY (fac_id)
REFERENCES umgmt_facultys (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT oe_fkey FOREIGN KEY (oe_id)
REFERENCES umgmt_oes (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT role_fkey FOREIGN KEY (role_id)
REFERENCES umgmt_roles (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT user_fkey FOREIGN KEY (user_id)
REFERENCES umgmt_users (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
好的,经过与 RevXaisks 的长时间讨论后,我会再睡一晚,但我认为 Shiro 在 Role/Permisson 检查方面不符合我的需求。 非常感谢兄弟,你这么有耐心。