我可以使用对实体具有权限的Spring SecurityACL,但我想知道如何测试用户是否具有对类的“创建”(第2位)权限。
比如:
aclPermissionEvaluator.hasPermission(auth, clazz, "create")
有人能帮我吗?
提前谢谢
我也有同样的问题,可悲的是,没有现成的解决方案。
如果您的域模型允许这样做,一种方法是将创建权限添加到您要创建的父对象
例如,假设要为客户端创建用户。可以为允许为此特定客户端创建用户的用户向客户端添加创建权限。这是我选择的道路。
如果您的域对象不允许这样做,我找到的唯一方法是:
acl_class_entry
,其中列表acl_entry
等价但链接到acl_class
而不是acl_object_identity
布尔hasPersion(身份验证,序列化目标ID,字符串目标类型,对象权限)
,如果target_id
为空,则针对acl_class_entry
检查权限。这将允许您通过使用SPel表达式hasPersion(nulll,'class Name','权限')
AclService
来创建这样的权限。您可以使用Spring的SpEL注释,例如@PreAuthorize
,并覆盖PermissionEvalue ator
接口的hasPersion
方法。如果使用按位权限掩码,并且用户的权限(作为int
)求值为'15'(1111
),并且对象所需的权限为'6'(0110
),则可以执行以下操作以下:
public boolean hasPermission(Authentication auth, Object targetObject, Object requiredPermissions) {
int permissionMask = MyUserClass.getMask();
int permissionsRequired = Integer.valueOf(requiredPermissions.toString());
return ((permissionMask | requiredPermissions) == permissionMask);
}
每当对象权限掩码中的活动位在用户权限上处于活动状态时,该值将返回true。然后,您需要在安全性中声明此自定义权限计算器。xml
文件:
<security:global-method-security pre-post-annotations="enabled">
<security:expression-handler ref="expressionHandler"/>
</security:global-method-security>
<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionEvaluator" ref="permissionEvaluator"/>
</bean>
<bean id="permissionEvaluator" class="my.project.package.CustomPermissionEvaluator"/>
现在,每当您调用hasPersion()
时,您的自定义评估器将处理该请求。显然,您可以使用任何您喜欢的逻辑来计算权限——只要确保返回类型是布尔型
,并且要传递的参数与您要发送的相匹配(或者根据;小心格式异常)。
请注意,您的自定义参数必须作为对象传递
,以覆盖hasPermission()
;您还可以通过更改签名来处理您喜欢的任何参数类型(例如String或int),从而重载该方法,并且编译器应该选择最具体的签名。但是,由于您正在实现PermissionEvaluator接口,因此无论如何都必须包含给定的签名(身份验证、对象、对象),因此除非您有编写重载方法的特定需要,否则您也可以只重写。
创建目录权限 如果你想创建一个目录并授予777权限,你需要怎么做?查看Go的API文档我们可以这样写。 源文件为mkdir.go。 package main import ( "fmt" "os" ) func main() { err := os.MkdirAll("/tmp/gotest/", 0777) if err != nil { panic(er
问题内容: 我对开发数据库中的SQL Server 2008有要求 只有DBA(数据库所有者)可以创建,更改表。开发人员不应创建或更改表。 开发人员可以在dbo模式中创建/更改存储过程/用户定义的函数,并可以执行SP / UDF。 开发人员应在表(dbo模式中的表)上具有SELECT,INSERT,DELETE,UPDATE 如何使用GRANT语句实现此目的 从Google找到了示例解决方案,但仍
连接MySQL操作 mysql -h 主机地址 -u 用户名 -p 用户密码 注:-u与root可以不用加空格,其它参数也一样。 DEMO 打开电脑CMD,输入 mysql -h 127.0.0.1 -u root -p 回车,然后输入密码。就可以连接到本地的MySQL数据库。 创建MySQL用户 CREATE USER 'username'@'host' IDENTIFIED BY 'passw
问题内容: 嗨,我在Android中创建sqlite数据库时遇到了一些问题。 在模拟器上一切正常,我可以创建数据库。但这在实际的机器上不起作用。当我尝试在手机上调试应用程序时,它只是无法创建数据库。 谁能告诉我发生了什么事?我需要在清单文件中添加任何特殊权限吗?我已经尝试过ACCESS_CHECKIN_PROPERTIES或WRITE_EXTERNAL_STORAGE,但是仍然无法获取数据库。 顺
问题内容: 我的陈述书遇到一些权限问题。 当我登录数据库并执行简单的导出命令时,例如: 我得到回应: 但是,当我简单地写: 该文件被写入目录。我查看了mysql似乎定义读取和写入权限的文件,但我真的不知道如何修改它。 如何授予自己将mysql表导出到我喜欢的任何目录的权限? 问题答案: 问题是目录权限。mysqld不以current_user身份运行。将mysqld用户添加到对目标目录具有写权限的
问题内容: 我想做这样的事情: 您可以用Java这样做吗?(我来自ac#背景) 问题答案: 您可以轻松地使用