帮助解析分配的组和角色 [英] Help with parsing assigned groups and roles

查看:57
本文介绍了帮助解析分配的组和角色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的问题


表1是包含以下列的报告列表


报告ID,报告名称,组允许,角色允许

1报告1职员,经理用户,PowerUser


表2是用户列表


UserID,用户名,群组,角色

u1 John Doe文员用户

u2 Jane Doe经理PowerUser


怎么做我循环通过报告表1并在用户表2中选择基于组和角色的报告?


我已经有了解析列的功能

如下


CREATE FUNCTION ParseString2Table



@SourceString varchar(100)




退回@retTable TABLE



TextValue varchar(10)




AS


BEGIN

de clare @string varchar(500)

set @string = @SourceString

声明@pos int

声明@piece varchar(10)


/ * - 需要在输入字符串末尾添加分隔符(如果不存在)* /

如果正确(rtrim(@string) ),1)<> '',''

设置@string = @string +'',''


set @pos = patindex(''%,%''' ,@ string)

而@pos<> 0

开始

设置@piece = left(@string,@ post - 1)


/ * - 你有一段数据,所以插入,打印,随心所欲。* /

INSERT INTO @retTable VALUES(cast(@piece as varchar(10)))


设置@string = stuff(@string,1,@ post,'''')

set @pos = patindex(''%,%'', @string)

结束


返回


结束


我需要一些循环通过报告表而不使用游标的方式和

检查用户权限


请帮助...

This is my problem

Table 1 is a list of reports that have the following columns

Report ID, Report Name, Groups Allowed, Roles Allowed
1 Report 1 Clerk, Mgr User, PowerUser

Table 2 is a list of users

UserID, User Name, Group, Role
u1 John Doe Clerk User
u2 Jane Doe Mgr PowerUser

How do i loop thru the reports table 1 and select the reports based on Group and Role in the user table 2?

I have already got a function to parse the columns
as follows


CREATE FUNCTION ParseString2Table
(
@SourceString varchar(100)
)

RETURNS @retTable TABLE
(
TextValue varchar(10)
)

AS

BEGIN
declare @string varchar(500)
set @string = @SourceString
declare @pos int
declare @piece varchar(10)

/*-- Need to tack a delimiter onto the end of the input string if one doesn''t exist*/
if right(rtrim(@string),1) <> '',''
set @string = @string + '',''

set @pos = patindex(''%,%'' , @string)
while @pos <> 0
begin
set @piece = left(@string, @pos - 1)

/*-- You have a piece of data, so insert it, print it, do whatever you want to with it.*/
INSERT INTO @retTable VALUES( cast(@piece as varchar(10)))

set @string = stuff(@string, 1, @pos, '''')
set @pos = patindex(''%,%'' , @string)
end

RETURN

END

I need some way of looping thru the reports table without using a cursor and
checking the user permissions

Help Please...

推荐答案

不确定我是否理解以下列中的值


允许的群组,允许的角色




Nicenjgirl
Not sure if I understand correctly values in following columns

Groups Allowed, Roles Allowed



Nicenjgirl



不确定我是否理解以下栏目中的值


允许的群组,角色允许d $ /


Nicenjgirl
Not sure if I understand correctly values in following columns

Groups Allowed, Roles Allowed



Nicenjgirl



我想我不应该使用User&经理作为例子。

让我们说两个不同的部门 - 制造与发展完成


所以Groups Allowed列是varchar(1000)并且将是

" MAN,FIN,DELIVERY"

和允许的角色columnd也是varchar(1000),类似于

" User,PowerUser"


Well I guess I should not have used User & Mgr as examples.
Let''s say 2 different departments - Manufacturing & Finishing

so the Groups Allowed column is varchar (1000) and would be
"MAN, FIN, DELIVERY"
and the Roles Allowed columnd is also varchar(1000) and would be something like
"User, PowerUser"


I我觉得没有你最后的回复就得到了。


看看我做了什么。


1.创建表格并填充数据:


[PHP]创建表table1(ReportID varchar(10),ReportName varchar(10) ),GroupsAllowed varchar(100),RolesAllowed varchar(100))

插入table1值(''1 Report'',''1 Clerk'',''Mgr User'','' PowerUser'')

插入table1值(''2 Report'',''1 Clerk'',''User'',''PowerUser User'')



创建表table2(UserID varchar(10),UserName varchar(20),[Group] varchar(100),Role varchar(20))

insert into table2 values(''u1'',''John Doe'',''Clerk'',''User'')

插入table2值(''u2'',''Jane Doe'',''Mgr'',''PowerUser'')[/ PHP]


2.创建功能


[PHP] CREATE FUNCTION fnSplit(@String nvarchar(1000),@ Delimiter char(1),@ SearchFor varchar(100))

RETU RNS varchar(100)

AS


BEGIN

DECLARE @INDEX INT

DECLARE @SLICE nvarchar(4000)

DECLARE @OriginalString varchar(4000)

SELECT @OriginalString = @String

SELECT @INDEX = 1

WHILE @INDEX!= 0


BEGIN

- 获取第一次发生的指数SPLIT CHARACTER

选择@INDEX = CHARINDEX(@ Delimiter,@ STRING)

- 现在推动它进入SLICE VARIABLE的一切

IF @INDEX!= 0

SELECT @SLICE = LEFT(@ STRING,@ INDEX - 1)

ELSE

SELECT @SLICE = @STRING

- 将项目输入结果集

IF @SLICE = @SearchFor

BEGIN

RETURN @SLICE
结束


- 将主题项目中的项目删除

SELECT @STRING = RIGHT(@ STRING,LEN(@) STRING) - @INDEX)

- 如果我们已经完成,我们将退出

如果LEN(@STRING)= 0 BREAK

END

RETURN NULL

END [/ PHP]


3.运行查询:


[PHP]从table1 a中选择*



在dbo.fnSplit上加入table2 b(a.RolesAllowed,'''',b.role)= b.role [ / PHP]


祝你好运。


希望它有效。

我测试了它确实对我有效。
I think I got it without your last reply.

See what I did.

1. Create tables and populate with data:

[PHP]create table table1(ReportID varchar(10), ReportName varchar(10), GroupsAllowed varchar(100), RolesAllowed varchar(100))
insert into table1 values (''1 Report'', ''1 Clerk'', ''Mgr User'', ''PowerUser'')
insert into table1 values (''2 Report'', ''1 Clerk'', ''User'', ''PowerUser User'')


Create table table2(UserID varchar(10), UserName varchar(20), [Group] varchar(100), Role varchar(20))
insert into table2 values (''u1'', ''John Doe'', ''Clerk'', ''User'')
insert into table2 values (''u2'', ''Jane Doe'', ''Mgr'', ''PowerUser'')[/PHP]


2. Create Function

[PHP]CREATE FUNCTION fnSplit(@String nvarchar(1000), @Delimiter char(1), @SearchFor varchar(100))
RETURNS varchar(100)
AS

BEGIN
DECLARE @INDEX INT
DECLARE @SLICE nvarchar(4000)
DECLARE @OriginalString varchar(4000)

SELECT @OriginalString = @String
SELECT @INDEX = 1
WHILE @INDEX !=0


BEGIN
-- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER
SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
-- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
IF @INDEX !=0
SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
ELSE
SELECT @SLICE = @STRING
-- PUT THE ITEM INTO THE RESULTS SET
IF @SLICE = @SearchFor
BEGIN
RETURN @SLICE
END

-- CHOP THE ITEM REMOVED OFF THE MAIN STRING
SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
-- BREAK OUT IF WE ARE DONE
IF LEN(@STRING) = 0 BREAK
END
RETURN NULL
END [/PHP]

3. Run query:

[PHP]select *
from table1 a
join table2 b on dbo.fnSplit(a.RolesAllowed, '' '', b.role) = b.role[/PHP]


Good Luck.

Hope it works.
I tested and it did work for me.


这篇关于帮助解析分配的组和角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆