CRM中现没有正确处理一个用户对应多个角色,应自已做的时间长了记不清了,应一一检查如下功能:
1.建立角色时对所有目录都没有权限
检查如下;CRM_RolesAdd,核心代码如下
--添加操作
INSERT INTO acl_roles(
[id],[created_by],[name],[description],[deleted]
)VALUES(
@id,@created_by,@name,@description,@deleted
)
DECLARE @ins_error int
SELECT @ins_error = @@ERROR
--插入在角色目录表中没有的关系,如果catalog表中无数据时,增加角色会出错,要先增加目录,才能增加角色
--如果目录中没有明细,就不运行这条语句
DECLARE @CatalogCount int
SET @CatalogCount=(SELECT COUNT(*) FROM CRM_CATALOG)
IF @CatalogCount>0
BEGIN
--角色与目录之间是一个笛卡尔积,一个角色对应所有目录,一个目录属于所有角色,初始权限为0处理正确
insert crm_rolecatalog(RolesID,CatalogID) select a.id,b.id from acl_roles a,crm_catalog b where ltrim(a.id)+ltrim(CAST(b.id AS char(3))) not in(select ltrim(RolesID)+ltrim(CAST(CatalogID AS char(3))) from crm_rolecatalog) order by a.id
PRINT '插入CRM_ROLECATALOG'
END
2.更改角色对目录是权限只能用update去更新
RoleBase.RoleCatalogSetPower(roleID,Catalogid,1);//为当前角色目录设定权限
对应存储过程"
RoleCatalogUpdatePower
核心如下:--当前角色当前目录设定权限,正确处理
UPDATE CRM_RoleCatalog SET IsPower=@IsPower where RolesID=ltrim(@RolesID) AND CatalogID=@CatalogID
3.一个用户对应一个角色,修改成一个用户对应多用角色
(无需要设置,去掉限制,增加提示当前用户如果已经是另一个角色,以提配管理员处理错误)
自已做的都不记得当时怎么做的了,这里提醒自已,角色与用户之间是在行选择用户(弹出窗口)时返回时保存角色与用户关系的.
string openstr="window.showModalDialog(\'RoleSelectUser.aspx?rand=Math.random()&RolesID="+rolesid+"\',window,'dialogWidth=600px;dialogHeight=400px;status=no;scroll=yes;resizable=no;\');";
Button1.Attributes.Add("onclick",openstr);
应增加对当前角色是否经存在于角色用户表中,
AddRoleLoginuser->CRM_AddRoleLoginuser
--是否已经插入过,如果已经插入过就不执行插入
IF NOT EXISTS(SELECT * FROM CRM_RoleLoginuser WHERE RoleID=ltrim(@RoleID) AND LoginUserID=@LoginUserID )--00006
INSERT INTO CRM_RoleLoginuser([RoleID],[LoginUserID])VALUES(@RoleID,@LoginUserID)
--增加用当前用户去查是否已经存在crm_roleLoginuser中,并返回角色代码,如果当前角色代码与当前编辑的代码不一样,就提示
3.动态菜单中正确处理当一个用户有多个角色时,如何设定菜单的权限问题,即应先合并两个角色的权限,合并出两个角色的权限.
RoleBase.GetCatalogByMoudle(Moduleid,userid)->现在是以模块与用户来提取目录权限的
对应存储过程
CRM_GetCatalogByMoudle--处理当一个用户有多个角色时,目录取有权限的那个角色的
详如下:
CREATE PROCEDURE CRM_GetCatalogByMoudle
(
@ModuleID int,
@Userid int
)
AS
SET NOCOUNT ON
--select id as CatalogID,catalogName,description,url from CRM_catalog where moduleid=@ModuleID
select a.RolesID,a.CatalogID,a.IsPower,a.LoginUserID,b.catalogName,b.description,(Case IsPower when 0 then '0.aspx' else b.url end ) as url into #tempmenu from zy_view_LoginuserCatalog a,crm_catalog b where b.id=a.CatalogID and b.moduleID=@ModuleID and a.LoginUserid=@Userid order by b.postion
--角色目录用户关系视图
--select * from zy_view_LoginuserCatalog where loginuserid=27 order by catalogid
select catalogid,sum(ispower) as ispower,max(url) as url,loginuserid,catalogname,[description] from #tempmenu group by catalogid,loginuserid,catalogname,[description]
drop table #tempmenu
RETURN
GO