Apache Shiro - 自定义jdbc领域 - 读取角色/权限

时间:2015-12-07 13:05:10

标签: java postgresql java-ee shiro

我正在将Apache Shiro实施到我的Web应用程序中,并且在开始时遇到了问题。

我想从postgreSQL数据库加载角色和权限,并在用户具有角色/权限时进行检查。

我的角色 - 权利 - 系统包括以下内容:

用户 - >有角色(多种可能)

角色 - >有权利(多种可能)

可以将角色分配给多个用户&可以将权限分配给多个角色

用户角色分配始终与其他两个条件相关:

  • 组织单位(在我的案例中称为OE)
  • A Faculty

基本上用户“Faculty-Admin”可能具有以下内容:

  • 角色OE-Admin拥有OE的所有权利:3和教师:员工

所以他可以说OE'3'的教职员工'manage_Users'

我知道如何在shiro.ini文件中实现角色,但由于我在数据库中拥有自己的角色/权限(权限),我需要从那里加载。

在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:正确:教师(或按顺序改变它们,真正重要)

现在最大的问题是:如何从我的数据库“加载”我的角色/权限,以获得具有权限的角色的所述格式?

到目前为止,我在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

或者有什么步骤可以实现这一目标?

Any1对Apache Shiro的更多体验可能会帮助我吗? 有一些教程,但我发现很难跟随他们创建一个自定义的jdbc领域与owm角色&权限。

修改 数据库结构:

用户:

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)

以防万一,这是我存储User-Role-OE-Fac Relations

的表格
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

1 个答案:

答案 0 :(得分:0)

经过与RevXaisks的长时间讨论后,我会再睡一晚,但我认为Shiro在角色/许可检查方面不符合我的需求。 非常感谢你,因为你非常耐心。