`

osworkflow --权限的一些问题(group组)

阅读更多

来源:http://hi.baidu.com/pluto_andy/blog/item/8f74c20b4a5c061695ca6b39.html

 

在osworkflow的example.xml中,可以看到这样的配置:

<condition type="class">
       <arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
       <arg name="group">foos</arg>
</condition>

这是一个条件语句,意思是:判断当前执行改流程的用户在不在group组(foos是组的名字)中,是执行什么流程,不是执行什么流程。

那在实际开发中如何应用这个组呢?这就要用到osuser.xml配置文件。

<opensymphony-user>

<!--数据储存在内存中-->
<provider class="com.opensymphony.user.provider.memory.MemoryAccessProvider" />
<provider class="com.opensymphony.user.provider.memory.MemoryCredentialsProvider" />
<provider class="com.opensymphony.user.provider.memory.MemoryProfileProvider" />

<!--数据持久化到数据库中-->

<provider class="com.opensymphony.user.provider.jdbc.JDBCAccessProvider">
<property name="user.table">eruser</property>
<property name="group.table">role</property>
<property name="membership.table">user_role</property>
<property name="user.name">usid</property>
<property name="user.password">loginpwd</property>
<property name="group.name">roleid</property>
<property name="membership.userName">ur_userid</property>
<property name="membership.groupName">ur_roleid</property>
<property name="datasource">java:comp/env/jdbc/sqlserver</property>
</provider>

<provider class="com.opensymphony.user.provider.jdbc.JDBCCredentialsProvider">
<property name="user.table">eruser</property>
<property name="group.table">role</property>
<property name="membership.table">user_role</property>
<property name="user.name">usid</property>
<property name="user.password">loginpwd</property>
<property name="group.name">roleid</property>
<property name="membership.userName">ur_userid</property>
<property name="membership.groupName">ur_roleid</property>
<property name="datasource">java:comp/env/jdbc/sqlserver</property>
</provider>

<provider class="com.opensymphony.user.provider.jdbc.JDBCProfileProvider">
<property name="user.table">eruser</property>
<property name="group.table">role</property>
<property name="membership.table">user_role</property>
<property name="user.name">usid</property>
<property name="user.password">loginpwd</property>
<property name="group.name">roleid</property>
<property name="membership.userName">ur_userid</property>
<property name="membership.groupName">ur_roleid</property>
<property name="datasource">java:comp/env/jdbc/sqlserver</property>
</provider>

<authenticator class="com.opensymphony.user.authenticator.SmartAuthenticator"/>

</opensymphony-user>

简要的说明一下改配置文件:

当数据存储在内存中时,不用做什么配置。要持久化到数据库中,就要配置数据库连接池了。

property name="datasource">java:comp/env/jdbc/sqlserver</property>

这条语句就是对连接池的调用。

在osworkflow中主要有三个类对group进行操作:

User、Group、UserManager

user对应相应的用户表,Group对应相应的组表,两表是多对多的关系。有个中间表维护两种表。

UserManager的作用就是管理用户和组以及两者之间的关系。

------------------------------------------具体应用代码--------------------------------------------

UserManager um = UserManager.getInstance();    //

com.opensymphony.user.User test = null;

test = um.createUser("test"); //新建用户test

foos = um.createGroup("haha");//新建用户haha

test.addToGroup(foos);   //将test添加到haha组中

//程序执行流程时,会执行OSUserGroupCondition

public class OSUserGroupCondition implements Condition {
    //~ Methods ////////////////////////////////////////////////////////////////

    public boolean passesCondition(Map transientVars, Map args, PropertySet ps) {
        try {
            WorkflowContext context = (WorkflowContext) transientVars.get("context");
            User user = UserManager.getInstance().getUser(context.getCaller());

            return user.inGroup((String) args.get("group"));
        } catch (EntityNotFoundException e) {
            return false;
        }
    }
}

更改源文件JDBCAccessProvider类中inGroup方法的sql语句

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics