powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Научите как пользоваться resource...
68 сообщений из 68, показаны все 3 страниц
Научите как пользоваться resource...
    #36469119
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ZEN-квикстарте есть упонинание про вот такой вид безопастности...

автор
Код: plaintext
<button id="myButton" caption="Press Me" resource="ADMIN" />
Это означает, что если пользователь обладает привилегиями на ресурс «ADMIN», то кнопка «myButton» будет отображаться для этого пользователя на странице.

Но далее про это ничего не найду... Как создать этот "ресурс"? Как потом осуществить привязку пользователя страницы к этому ресурсу?
Очень хотелось бы научиться этим пользоваться...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469297
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, krvsa!

Приведу фрагменты кода где использую и создаю ресурсы.

Клиент.
<hmenu id="MainMenu"
onshowHelp="zenPage.showHelp(help);"
help="Top">
<menu caption="Система" id="menuSystem" resource="User_SYS" layout="vertical">
<menuItem id="mnuRegUser"
caption="Реєстрація користувачів"
link="WEBFORM.frmRegUsers.cls"
image="images/regusers.png"
title="Реєстрація користувачів для роботи в системі"
resource="Admin_Total"
/>
<menuItem id="mnuPeople"
caption="Фізичні особи"
link="WEBFORM.frmPeople.cls"
image="images/users.png"
title="Довідник фізичних осіб"
resource="Individual"
/>
...

Программа, используя которую можно создавать пользователей, роли и ресурсы.
sysWork ;

//создание нового пользователя
NewUser(oldLog,log,pwd,id,idGr,managerSys)
s PeopleID=##class(DATA.HUMAN.People).%OpenId(id)
s FullName=PeopleID.Man.Surname_" "_PeopleID.Man.Name_" "_PeopleID.Man.Patronymic
d PeopleID.%Close()
s Gr=##class(DATA.SHARED.GroupUserSys).%OpenId(idGr)
s NameGr=Gr.Name
d Gr.%Close()
s namespace=$ZNSpace
zn "%SYS"
s prop="",sysUser=""
s sysUser=##Class(Security.Users).Get(oldLog,.prop)

if sysUser=1
{
s roles="%DB_%DEFAULT,%DB_CACHESYS,"_NameGr
if managerSys {s roles=roles_",%Manager"}
s prop("Roles")=roles
s prop("Password")=pwd
s prop("FullName")=FullName
s sysUser=##Class(Security.Users).Modify(oldLog,.prop)
}
else
{
s sysUser=##Class(Security.Users).%New()
s sysUser.Name=log
s sysUser.Password=pwd
s sysUser.FullName=FullName
do sysUser.Roles.Clear()
do sysUser.Roles.Insert("%DB_%DEFAULT")
do sysUser.Roles.Insert("%DB_CACHESYS")
if managerSys {do sysUser.Roles.Insert("%Manager")}
do sysUser.Roles.Insert(NameGr)
d sysUser.%Save()

}
zn namespace
&sql(GRANT * ON * TO *)
q

//удаление пользователя
DeleteUser(id)
;DO $SYSTEM.Security.Login("_SYSTEM","SYS")
s cls=##class(DATA.SYSTEM.USERS).%OpenId(id)
if cls'=""
{ s login=cls.Login
d cls.%Close()
zn "%SYS"
d ##Class(Security.Users).Delete(login)
}
q

//удаление роли
DeleteRoles(id)
zn "%SYS"
do ##Class(Security.Roles).Delete(id)
q

//создание роли
CreateRoles(Name,Opis,SpisRes)
zn "%SYS"
if (##Class(Security.Roles).Exists(Name))
{
s Properties("Resources")=""
s Properties("Resources")=SpisRes
do ##Class(Security.Roles).Modify(Name,.Properties)
}
else
{
s res=##Class(Security.Roles).%New()
d res.Create(Name,Opis,SpisRes,) ; создает роль с ресурсами(разделитель запятая)
d res.%Save()
}

q

//редактирование роли
EditRoles(oldid,id)
zn "%SYS"
do ##Class(Security.Roles).Copy(oldid,id,oldid)
do ##Class(Security.Roles).Delete(oldid)

q


//удаление ресурса
DeleteResources(id)
zn "%SYS"
do ##Class(Security.Resources).Delete(id)
q

//создание ресурса
CreateResources(Name,Opis)
zn "%SYS"
s res=##Class(Security.Resources).%New()
s res.Name=Name
s res.Description=Opis
d res.%Save()
q


CreateAllResources
s namespace=$ZNSpace
zn "%SYS"
Set rset = ##class(%ResultSet).%New("DATA.SHARED.ResSys:ByName")
Do rset.Execute()


//заполняем созданый список ресурсов

While (rset.Next()) {

s res=##Class(Security.Resources).%New()
s res.Name=rset.Data("Name")
s res.Description=rset.Data("Opisanie")
d res.%Save()

}
zn namespace
q


СreateResourcesFrom()
;дополнение списка ресурсов
s namespace=$ZNSpace
zn "%SYS"
s i=0
for {
set i=i+1
set option=$CASE(i,1:"Individual^Фізічна особа",
2:"Juridical^Юридична особа",
3:"Admin_Total^Адміністратор системи",
4:"Admin_DB^Адміністратор бази даних",
5:"User_SYS^Загальний користувач",
6:"Individual_Edit^Редагування Фізічної особи",
7:"Juridical_Edit^Редагування Юридичної особи",
8:"Total_Edit^Редагування",
9:"User_GO^Загальний користувач ОСАГО",
10:"Admin_GO^Адміністратор бази данних ОСАГО",
11:"%System_CallOut^%System_CallOut",
12:"%All^%All",
:"close")
q:option="close"


s NamRes=$p(option,"^"),NamOpis=$p(option,"^",2)

i NamRes'="" {
s res=##Class(Security.Resources).Exists(NamRes)
i 'res {

s sres=##Class(Security.Resources).%New()
s sres.Name=NamRes
s sres.Description=NamOpis
d sres.%Save()

}
zn namespace

Set rset = ##class(%ResultSet).%New("DATA.SHARED.ResSys:SerchName")
Do rset.Execute(NamRes)
i 'rset.Next() {

s rres=##Class(DATA.SHARED.ResSys).%New()
s rres.Name=NamRes
s rres.Opisanie=NamOpis
d rres.%Save()

}
zn "%SYS"

}
}

q 1

Пример вызова программы.
/// Формирование полного набора ресурсов
Method СreateResourcesFrom() [ ZenMethod ]
{

j СreateResourcesFrom^sysWork()
h 1
&js<zenPage.gotoPage('WEBFORM.frmAllResSys.cls');>
q
}

Создание роли.

Class WEBFORM.frmCardGroup Extends WEBFORM.Template.TemplateCard
{

/// Имя приложения, которому принадлежит эта страница.
Parameter APPLICATION = "WEBFORM.Application";

/// Отображаемое имя для нового приложения.
Parameter PAGENAME;

/// Домен, используемый для локализации.
Parameter DOMAIN;

Property objID As %ZEN.Datatype.integer(ZENURL = "ID") [ InitialExpression = 1 ];

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData mainPane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" title="">
<dataController id="source" modelClass="WEBFORM.DataModel.GroupUserSys" modelId="#(%url.ID)#"/>
<fieldSet label="Картка ролі користувача" labelStyle="font-size: 1.5em; text-align: center;">
<form id="idForm" align="center" valign="middle" controllerId="source">
<text label="Назва ролі:" id="Name"
name="Name" size="50"
required="true"
requiredMessage="не заповнено"
dataBinding="Name"
/>
</form>
</fieldSet>
<hgroup align="right">
<button align="right" caption="Зберегти" onclick="zenPage.saveItem();"/>
<spacer width="40"/>
<button align="right" caption="Вихід" onclick="zenPage.ExitForm();"/>
</hgroup>
<text label="ID:" id="objid" value="#(%url.ID)#" size="4" hidden="true"/>

</pane>
}

/// сохранение записи
Method saveItem() [ Language = javascript ]
{
var form = zenPage.getComponentById('idForm');
form.save();
var name = zenPage.getComponentById('Name').getProperty('value');
this.CreateRoles(name);
self.close();
}

/// создание роли
ClassMethod CreateRoles(id) [ ZenMethod ]
{
j CreateRoles^sysWork(id,id,"")
Quit
}

/// закрываем окно
Method ExitForm() [ ZenMethod ]
{
&js<self.close();>
}

}

создание списка ресурсов для роли.

Class WEBFORM.frmCardPermissionGroup Extends WEBFORM.Template.TamplateObject
{

/// Имя приложения, которому принадлежит эта страница.
Parameter APPLICATION = "WEBFORM.Application";

/// Отображаемое имя для нового приложения.
Parameter PAGENAME;

/// Домен, используемый для локализации.
Parameter DOMAIN;

Property objID As %ZEN.Datatype.integer(ZENURL = "ID") [ InitialExpression = 1 ];

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="" dragAndDrop="true">
<hgroup align="center">
<vgroup valign="top">
<titleBox title="Доступні ресурси"/>
<spacer height="2"/>
<listBox id="DostMenu" listWidth="400px" listHeight="570px"
dragEnabled="true" dropEnabled="true"
onafterdrag="zenPage.afterDrag(zenThis,dragData);">
</listBox>
</vgroup>
<spacer width="10"/>
<vgroup valign="top">
<titleBox title="Вибрані ресурси"/>
<spacer height="2"/>
<listBox id="SelectMenu" listWidth="400px" listHeight="570px"
dragEnabled="true" dropEnabled="true"
onafterdrag="zenPage.afterDrag(zenThis,dragData);">
</listBox>
</vgroup>
</hgroup>
<hgroup align="center">
<button align="center" caption="Зберегти" onclick="zenPage.saveItem();"/>
<spacer width="40"/>
<button align="center" caption="Вихід" onclick="zenPage.ExitForm();"/>
</hgroup>
<text label="ID:" id="objid" value="#(%url.ID)#" size="4" hidden="true"/>
</page>
}

/// сохранение записи
Method saveItem() [ Language = javascript ]
{
var menu= zenPage.getComponentById('SelectMenu');
var itemCount=menu.getOptionCount();
var getStringItem = new Array();
for (i=0;i<itemCount;i++)
{
getStringItem[i]=menu.getOptionValue(i)+'^'+menu.getOptionText(i);
}
this.savePermissionGroup(getStringItem);
}

Method savePermissionGroup(listItem As %ListOfDataTypes) [ ZenMethod ]
{
s cl=##class(DATA.SHARED.GroupUserSys).%OpenId(..objID)
s name=cl.Name
d cl.SelectMenu.Clear()
s res=""
if (listItem'="")
{
for i=1:1:listItem.Count()
{
s clItem=##class(DATA.SHARED.ParamSaveGroup).%New()
s clItem.value=$p(listItem.GetAt(i),"^",1)
s clItem.text=$p(listItem.GetAt(i),"^",2)
d cl.SelectMenu.Insert(clItem)
s res=res_clItem.value_":U,"
}

}

s res=$e(res,1,$l(res)-1)
d cl.%Save()

j CreateRoles^sysWork(name,name,res)

&js<alert('Ресурси записані!');>
}

Method loadPermissionGroup() [ ZenMethod ]
{

//открываем класс где определены доступные пункты меню для группы
s cl=##class(DATA.SHARED.GroupUserSys).%OpenId(..objID)
//создаем стартовый список пунктов меню
s clDostMenu=##class(%ListOfDataTypes).%New()

Set rset = ##class(%ResultSet).%New("DATA.SHARED.ResSys:ByName")
Do rset.Execute()

//заполняем созданый список ресурсов
While (rset.Next())
{
set option=rset.Data("Name")_"^"_rset.Data("Opisanie")
d clDostMenu.Insert(option)
}

//очищаем списоки
&js<var compSelect = zenPage.getComponentById('SelectMenu');
var compDost = zenPage.getComponentById('DostMenu');
if (compSelect){compSelect.resetOptions()};
if (compDost){compDost.resetOptions()};>

Set tComp = %page.%GetComponentById("SelectMenu")
If $IsObject(tComp)
{
for i=1:1:cl.SelectMenu.Count()
{
s clItem=##class(DATA.SHARED.ParamSaveGroup).%New()
s clItem=cl.SelectMenu.GetAt(i)
// заполняем список выбранных пунктов меню
&js<
var comp = zenPage.getComponentById('SelectMenu');
if (comp)
{
comp.appendOption('#(clItem.value)#','#(clItem.text)#');
}
>
//убираем из списка доступных пунктов меню выбранные
for j=1:1:clDostMenu.Count()
{
s iDelete=clDostMenu.Find(clItem.value_"^"_clItem.text)
d clDostMenu.RemoveAt(iDelete)
}
}

}
//заполняем список доступных пунктов меню
for j=1:1:clDostMenu.Count()
{
s clDostItem=clDostMenu.GetAt(j)
s value=$p(clDostItem,"^",1)
s text=$p(clDostItem,"^",2)
&js<
var comp = zenPage.getComponentById('DostMenu');
if (comp)
{
comp.appendOption('#(value)#','#(text)#');
}
>
}
}

/// закрываем окно
Method ExitForm() [ ZenMethod ]
{
&js<self.close();>
}

Method afterDrag(listBox, dragData) [ Language = javascript ]
{
if (dragData.targetComponent.isOfType('listBox')) {
// ignore drag onto ourselves
if (dragData.targetComponent != listBox) {
if (dragData.sourceItem >= 0) {
listBox.removeOption(dragData.sourceItem);
}
}
}
}

/// This client event, if present, is fired when the page is loaded.
Method onloadHandler() [ Language = javascript ]
{
this.loadPermissionGroup();
}

}


Создание нового пользователя

Class WEBFORM.frmCardRegUser Extends WEBFORM.Template.TemplateCard
{

/// Имя приложения, которому принадлежит эта страница.
Parameter APPLICATION = "WEBFORM.Application";

/// Отображаемое имя для нового приложения.
Parameter PAGENAME;

/// Домен, используемый для локализации.
Parameter DOMAIN;

Property objID As %ZEN.Datatype.integer(ZENURL = "ID") [ InitialExpression = 1 ];

Property paramSave As %Integer [ InitialExpression = 0 ];

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData mainPane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" title="">
<dataController id="sourceUsers"
modelClass="WEBFORM.DataModel.Users" modelId="#(%url.ID)#"/>
<fieldSet label="Реєстраційна картка користувача" labelStyle="font-size: 1.5em; text-align: center;">
<vgroup id="groupRight" width="100%" valign="top">
<spacer height="10"/>
<html id="error" align="center" enclosingStyle="color:red;"></html>
<form id="formBasic" align="center" width="500px">
<group align="center">
<spacer height="40"/>
<dataCombo label="Фізична особа" id="idSurname" name="idSurname" size="40"
dropdownWidth="400"
editable="true"
searchKeyLen="20"
comboType="button"
buttonCaption="Пошук"
buttonTitle="Пошук за прізвищем"
sql="SELECT %ID,Man_Surname,Man_Surname _' '_ Man_Name _' '_ Man_Patronymic,
Man_BirthDay FROM DATA_HUMAN.People WHERE Man_Surname %STARTSWITH ? ORDER BY Man_Surname"
sqlLookup="SELECT Man_Surname,Man_Surname _' '_ Man_Name _' '_ Man_Patronymic,
Man_BirthDay FROM DATA_HUMAN.People WHERE %ID=? ORDER BY Man_Surname"
unrestricted="true"
columnHeaders="Прізвище ім'я та по батькові, День народження"
displayColumns="3,4"
choiceColumn="2"
valueColumn="1"
maxRows="100"
required="false"
onchange="zenPage.changeEnterprise();"
/>

<spacer height="10"/>

<dataCombo id="idGruppa"
size="30"
comboType="button"
buttonCaption="Група ресурсів"
label="Групи системних ресурсів"
name="idGruppa"
editable="true"
choiceColumn="2"
valueColumn="1"
displayColumns="2"
dropdownWidth="25.0em"
dropdownHeight="auto"
searchKeyLen="5"
sql="SELECT %ID,Name FROM DATA_SHARED.GroupUserSys ORDER BY Name"
sqlLookup="SELECT Name FROM DATA_SHARED.GroupUserSys WHERE %ID = ? ORDER BY Name"
columnHeaders="Групи системних ресурсів"
cached="true"
required="false"
unrestricted="true"
/>
<text label="Логін:" id="Login" name="Login" size="40"
required="true"/>

<password label="Пароль:" id="Password1" name="Password1" size="40"
required="true"/>
<password label="ще раз:" id="Password2" name="Password2" size="40"
required= "true"/>

<checkbox id="manager"
label="Дозволено добавляти нових користувачів, та редагувати права доступу існуючих"
/>
<checkbox id="ShowAllRecord"
label="Дозволено перегляд усіх записів"
/>
</group>
</form>
</vgroup>
</fieldSet>
<spacer height="40"/>
<hgroup align="right">
<button align="right" caption="Реєстрація" onclick="zenPage.Registration();"/>
<spacer width="40"/>
<button align="right" caption="Вихід" onclick="zenPage.ExitForm();"/>
</hgroup>

</pane>
}

Method changeEnterprise() [ Language = javascript ]
{
var checkUser=zenPage.getComponentById('idSurname');
var id=checkUser.getProperty('value');
var countWorkPlace=this.systemIStartSetup(id);
if (countWorkPlace==0) alert('Увага! Для даної фізичної особи необхідно додати місце роботи!');
}

Method systemIStartSetup(id) As %Integer [ ZenMethod ]
{
s recordCount=0
set rs=##class(%ResultSet).%New()
set rs.ClassName="DATA.PERSONNELDEPARTMEN.Workplace"
set rs.QueryName="GetWorkplaceByPeopleID"
set sc=rs.Execute(id)
If $$$ISOK(sc)
{
while rs.%Next()
{
s ..paramSave=1
s recordCount=recordCount+1
}
}
q recordCount
}

Method ExitForm() [ ZenMethod ]
{
///закрываем окно
&js<self.close();>
}

/// Регистрация
Method Registration() [ ZenMethod ]
{
if ..paramSave=0
{
&js<alert('Увага! Для даної фізичної особи необхідно додати місце роботи!');>
q
}

if ($ROLES["%All")||($ROLES["%Manager")
{

if (..objID="")
{
set user=##class(DATA.SYSTEM.USERS).%New()

}
else
{
set user=##class(DATA.SYSTEM.USERS).%OpenId(..objID)

}

set p1 = ..%GetValueById("Password1")
set p2 = ..%GetValueById("Password2")
if p1'=p2 {
&js<zenPage.getComponentById('error').setContent("Ви ввели два різних пароля!");>
quit
}

#; проверка на наличие пустых полей
if '(..CheckValue()){
&js<zenPage.getComponentById('error').setContent("Заповніть всі поля!");>
quit
}



set oldLogin=user.Login
set login = ..%GetValueById("Login")
;s ^a(1)=oldLogin_","_login_","_(oldLogin '= login)

#; если введенный Login существует – ошибка

if (..objID="")
{
set pId = ##class(DATA.SYSTEM.USERS).FindPersonal(login)
if (pId '= "") {
&js<zenPage.getComponentById('error').setContent("Користувач с таким логіном уже існує! Введіть інший.");>
quit
}

}

if oldLogin'="",oldLogin'=login
{
&js<zenPage.getComponentById('error').setContent("Заборонено редагувати логін в цьому режимі! Потрібно вилучити користувача.");>
Do %page.%SetValueById("Login",user.Login)
quit
}

#; новый класс DATA.SYSTEM.USERS
//Set text=$ZCONVERT(p1,"O","UTF8")
//Set pasw=$SYSTEM.Encryption.Base64Encode(text)
//set user.Password=pasw


Set text=$ZCONVERT(p1,"O","UTF8")
Set pasw=$SYSTEM.Encryption.Base64Encode(text)
set user.Password=pasw
set user.Login = login
//set user.Password = p1
d user.PeopleSetObjectId(..%GetValueById("idSurname"))
d user.GrNameSetObjectId(..%GetValueById("idGruppa"))
//пользователю добавляется роль %Manager для возможности управления пользователями в системе
s user.ManagerSys=..%GetValueById("manager")
s user.ShowAllRecord=..%GetValueById("ShowAllRecord")
d user.%Save()
&js<var formB = zenPage.getComponentById('formBasic');
var error = zenPage.getComponentById('error');
error.setProperty('enclosingStyle',"color:green;")
error.setContent("Реєстрація завершена успішно!");
>
//добавляем данного пользователя в пользователи Cache'
j NewUser^sysWork(oldLogin,login,p1,..%GetValueById("idSurname"),..%GetValueById("idGruppa"),..%GetValueById("manager"))
}
else
{
&js<alert("У вас недостатньо превілегій для даної операції. Зверніться до 'Адміністратора системи'");>
}
quit
}

/// Проверка всех полей ввода
Method CheckValue() As %ZEN.Datatype.boolean [ ZenMethod ]
{
set p1 = ..%GetValueById("Password1")
set login = ..%GetValueById("Login")
set surname = ..%GetValueById("idSurname")
set priorit = ..%GetValueById("idGruppa")
if (login="")||(surname="")||(p1="")||(priorit="")
{
quit 0
}
quit 1
}

ClassMethod LoadUser(pForm As %ZEN.Component.form, pID As %ZEN.Datatype.string) [ ZenMethod ]
{
set user=##class(DATA.SYSTEM.USERS).%OpenId(pID)
if user'="" {
Do %page.%SetValueById("Login",user.Login)

set ent = user.People
if ent'="" {Do %page.%SetValueById("idSurname",ent.%Id())}

set ent = user.GrName
if ent'="" {Do %page.%SetValueById("idGruppa",ent.%Id())}

Do %page.%SetValueById("manager",user.ManagerSys)
Do %page.%SetValueById("ShowAllRecord",user.ShowAllRecord)
}
}


Method %OnAfterCreatePage() As %Status
{

If (..objID '= "") {
#; load contents of given object into form
Set tForm = ..%GetComponentById("formBasic")
Do ..LoadUser(tForm,..objID)
}

Quit $$$OK
}

}
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469308
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руководство по администрированию Caché версий 5.2, 2008, 2009, 2010 (стр. 137)
Уголок разработчика . Есть описание того, как можно интегрировать эту страницу в стандартную документацию Caché.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469566
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем ситуация такая:
при формировании страницы на стороне сервера происходит сбор всех компонентов и т.д. метод %DrawHTML по моему, в каждом компоненете при его формировании есть метод проверки разрешения его отображения на странице (это и есть resourse).
Если пользователь имеет в своем списке ресурсов такое название ресурса с признаком использования, то компонет отображается, иначе нет.
Соответственно: если на странице происходит обращение к компоненту, не важно из COS или JS, рекомендуется во избежании выскакивания ошибки, проверять наличие компонента.
Код: plaintext
1.
2.
COS:
 s t=%page.%GetComponentById('table')
 q:'$IsObject(t) 
Код: plaintext
1.
2.
JS:
 var btn=this.getComponentById('btnSave');
 if (btn) btn.setDisabled(true);
Ресурсы могут разделятся на разные типы действия (читать, писать, использовать)
Ресурсы назначаются как пользователям так и ролям, роли соответственно потом назначаются пользователям.
Все действия по назначению и т.д. можно делать в портале, а можно использовать свои штучки дрючки.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469596
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit Руководство по администрированию Caché версий 5.2, 2008, 2009, 2010
За это отдельное спасибо!

Начинаю читать.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469644
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuraM,

подскажите, а как вы SQL-таблицы раздаете пользователям?, точнее ролям?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469705
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то сразу много информации... А если т.с. "по шагам"?

Вот есть ЗЕН-страничка...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/// tmp
Class uch.ZEN.tmp Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "uch.ZEN.App";

/// Displayed name of this page.
Parameter PAGENAME = "tmp";

/// Domain used for localization.
Parameter DOMAIN = "";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}
/// This XML block defines the contents of this page.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
	<button id="btTest" caption="Test" />
</page>
}
}

Что теперь нужно сделать для того, чтобы кнопка показывалась "не всем"? Т.е. что делать:
1. ?
2. ?
3. ?
...?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469891
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

1. Сделать кнопку ресурсом (указать resource в теге кнопки)
2. Описать этот ресурс в системе (не оставив общедоступного права: Общедоступное право: галку "Чтение " убрать)
3. Создать нужную роль и добавить ресурс в роль
4. Добавить пользователю роль.

Разлогиниться и залогиниться - кнопки не будет.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469893
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри - кнопка как-раз будет ;)
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469991
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov1. Сделать кнопку ресурсом (указать resource в теге кнопки)
Т.е. так?

Код: plaintext
<button id="btTest" caption="Test" resource='test' />


kolesov2. Описать этот ресурс в системе (не оставив общедоступного права: Общедоступное право: галку "Чтение " убрать)
Вот он


kolesov3. Создать нужную роль и добавить ресурс в роль
Вот она


kolesov4. Добавить пользователю роль.
Вот он


kolesovРазлогиниться и залогиниться - кнопки не будет.
А это как? При старте странички у меня логин, пароль не запрашиваются...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469995
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovсорри - кнопка как-раз будет ;)
А на чем тогда тренироваться? Как тогда кнопками управлять?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470031
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно... У ресурса убраны все галки... А если его дать роли - все галки включены. Если там их все убрать - кнопка "Сохранить" не активна...
Это так нужно?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470093
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для кнопки достаточно только "U" - использовать
теперь зайди в
[Домашняя страница] > [Управление безопасностью] > [CSP приложения]
найди свое приложение, редактирование, убрать галку с "Не аутентифицированный"
поставить галку "пароль"
закрыть браузер и открыть ту страницу из студии
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470158
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007для кнопки достаточно только "U" - использовать
Написал везде U...

Ymka2007теперь зайди в
[Домашняя страница] > [Управление безопасностью] > [CSP приложения]
найди свое приложение, редактирование, убрать галку с "Не аутентифицированный"
поставить галку "пароль"
Вот так написал... Даже ресурс указал! Надо или нет?


Ymka2007закрыть браузер и открыть ту страницу из студии
Что-то не спрашивает... У меня ведь ЗЕН-страница или это не важно? УРЛ во такой использую

http://cache/uchet/uch.ZEN.tmp.cls
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470190
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через некоторое время таки пароль спросила... Но потом выдала ошибку

Код: plaintext
ОШИБКА # 5924 : Произошла ошибка, но указанная в настройках CSP-приложения пользовательская страница обработки ошибок не может быть загружена. Пожалуйста, обратитесь к администратору

Причем в юникоде. И никакой пользовательской страницы у меня не объявлено...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470207
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как теперь посмотреть чего не так?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470244
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отменяю "Пароль", ставлю "Не аутентифицированный" моя кнопочка рисуется без проблем...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470248
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что тут может быть не так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/// tmp
Class uch.ZEN.tmp Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "uch.ZEN.App";

/// Displayed name of this page.
Parameter PAGENAME = "tmp";

/// Domain used for localization.
Parameter DOMAIN = "";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}
/// This XML block defines the contents of this page.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
	<button id="btTest" caption="Test" resource="test" />
</page>
}
}

----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470323
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все так
если у твоего пользователя нет ресурса test, то у него на странице и не будет этой кнопки
поставь ресурс на страницу сразу все понятно будет
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470328
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

только этой роли недостаточно... нужно еще добавить роли типа "пользователь системы", "смотрельщик ЦСП", "читатель БД" и проч - тут простор для фантазии

Можно за счет нескольких ролей, можно просто все нужные ресурсы запихнуть в ту роль...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470355
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

В т.ч. нужны ресурсы типа %DB_%DEFAULT (или %DB_ВашаБД)

Кроме того, нужно проверить, что на гейтвее настроен и работает доступ к ЦСП (нажмите "проверить соединение с сервером" - м.б. вы в процессе убили неавторизованный доступ к ЦСП-сервису)
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470362
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovтолько этой роли недостаточно... нужно еще добавить роли типа "пользователь системы", "смотрельщик ЦСП", "читатель БД" и проч - тут простор для фантазии
У меня как раз с фантазией-то и туго. Мне бы рассказали точно чего еще добавить и куда дабы заработало...

kolesovМожно за счет нескольких ролей, можно просто все нужные ресурсы запихнуть в ту роль...
Я же пока вообще не вкурсе чего и как... Пока все на ощупь... Упёрся вот в ошибку...

Чего еще и куда добавлять не знаю... Может возьмёт кто не умелго по потронаж?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470371
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

добавление ресурса %DB_%DEFAULT в роль не помогло?
добавьте ВСЕ СУЩЕСТВУЮЩИЕ РЕСУРСЫ в роль - посмотрите, что выйдет ;)
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470372
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovВ т.ч. нужны ресурсы типа %DB_%DEFAULT (или %DB_ВашаБД)
Добавил в роль ресурс %DB_%DEFAULT - получил вот такую ошибку...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
На странице возникла ошибка исполнения

Ошибка: <PROTECT>%Log+ 1 ^%ZEN.Utils. 1  ^%ISC.ZENLOG,c:\intersystems\cache\mgr\
Ошибка:  5002 
CSP страница: /uchet/uch.ZEN.tmp.cls
Область: UCHET
Класс: uch.ZEN.tmp
Программа: %ZEN.Utils. 1 
Расположение: %Log+ 1 

%DB_ВашаБД еще нет... Не создавал никогда...

kolesovКроме того, нужно проверить, что на гейтвее настроен и работает доступ к ЦСП (нажмите "проверить соединение с сервером" - м.б. вы в процессе убили неавторизованный доступ к ЦСП-сервису)
А это как и где?
Такое ренее вообще не настраивал и не проверял...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470374
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovдобавьте ВСЕ СУЩЕСТВУЮЩИЕ РЕСУРСЫ в роль - посмотрите, что выйдет ;)
Ща спробану!
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470389
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запихал все - увидал таки страничку родимую!!!
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470410
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaОшибка: <PROTECT>%Log+1^%ZEN.Utils.1 ^%ISC.ZENLOG,c:\intersystems\cache\mgr\

Как я понимаю, не хватает доступа к базе, куда пишется лог - видать, в CACHESYS (но не уверен)

Дайте ресурс %DB_CACHESYS - м.б. и поможет

krvsaА это как и где?
Такое ренее вообще не настраивал и не проверял...

Конфигурация - Управление ЦСП-шлюзом - Проверить соединение с сервером

Если в адресе обнаружится порт (типа http:localhost:57772), а в ЦСП ходите без порта (вернее, на 80-й) то нужно порт вытереть из адреса
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470427
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Еще забыл сказать - в роль нужно добавить права на таблицы и процедуры (с учетом области) это в роли закладочка такая....
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470439
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovЕще забыл сказать - в роль нужно добавить права на таблицы и процедуры (с учетом области) это в роли закладочка такая....
Закладку видел... Я думал это будет т.с. вторая серия.

Видно рано я порадовался... Решил "усложнить" пример! Добавил вторую кнопку с другим ресурсом...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
/// tmp
Class uch.ZEN.tmp Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "uch.ZEN.App";

/// Displayed name of this page.
Parameter PAGENAME = "tmp";

/// Domain used for localization.
Parameter DOMAIN = "";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}
/// This XML block defines the contents of this page.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
	<html>
		<p>Пример работы ресурсов</p>
	</html>
	<button id="btAdm" caption="ADM" resource="UCH_ADM" />
	<button id="btUser" caption="USER" resource="UCH_USER" />
</page>
}
}

Но как бы я не логинился Админом или Юзером - всегда вижу обе кнопки. Где опять у меня что-то не так?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470478
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,
Есть класс class %CSP.UI.Portal.ColumnPriv он унаследован от %ZEN.Component.page (более подоробно посмотрите в Class Reference). Применяя данный класс можно управлять доступом как к таблице так и к отдельному столбцу таблицы.

Пример вызова.

Method rowLincSQLTlb() [ Language = javascript ]
{
var table = this.getComponentById('table');
var index = table.getProperty('selectedIndex');
if (index == -1)
{
alert("Виберіть запис та повторіть дію!");
return;
}
var data = table.getRowData(index);
var id = data.ID;
var Grantee = data.Name;
zenPage.launchPopupWindow(
zenLink('%CSP.UI.Portal.ColumnPriv.cls?$ID1='+Grantee+'&NAMESPACE=CIVICRESPONSIBILITY&ObjectType=TABLE&tab=4&IncludeSystem=0'),'',
'status,scrollbars,resizable=no,modal=yes,width=840,height=660');
}
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470483
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuraM , мне бы с кнопочками пока разобраться... С таблицами потом...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470600
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Выведите имя текущего пользователя и его роли:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
<html align="center"><h2>Пример работы ресурсов</h2></html>
<html align="center" OnDrawContent="DrawMessage"/>
...
</page>
}

Method DrawMessage(pSeed As %String) As %Status
{
  &html<<h1>Пользователь: #($UserName)#</h1>>
  &html<<h1>Его роли: #($ROLES)#</h1>>
  Quit $$$OK
}
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470605
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ymka2007,
Чуток перепутал с адресатом, кому надо было ответить (написал для krsva).
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470611
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krsva!
Извените не с тем ответом к Вам "влез"... Перепутал....http://www.sql.ru/forum/images/biggrin.gif
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470624
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuraM,

ничего страшного, я уже прочел
это то понятно что можно использовать, но вопрос
как это сделать программным образом???
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470643
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
этот класс только для столбцов таблиц ('%CSP.UI.Portal.ColumnPriv.cls)
а для таблиц? какой

krvsa, извини что параллелим, может кому понадобится
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470910
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ymka2007,
Таким образом добавляю программно
addSQLTable()
s pNamespace="CIVICRESPONSIBILITY"
s pObjName=""
s pGrantee="t222" ;роль или пользователь
s pObjectType="TABLE"
s pSchema="DATA_ACCOUNTING"
s pTable="Register"
s pColumns="Quantity"
s pPrivs=",1,2,3,4" ;1="s",2="i",3="u",4="r"
s pGrants=""
s pRevoke=0
s pIncludeSystem=0
s tSC = ##class(%CSP.UI.Portal.ColumnPriv).SaveData(pNamespace, pObjName, pGrantee, pObjectType, pSchema, pTable, pColumns, pPrivs, pGrants, pRevoke, pIncludeSystem)
q tSC

Отдельно для таблицы я не нашел, но можно и через этот класс добавить туже таблицу (конечно надо указывать какие столбцы из таблицы будут добавляться).

Надо "порыть" класс %SQL.Manager.API (класс метод SaveData из %CSP.UI.Portal.ColumnPriv использует Set tSC = ##class(%SQL.Manager.API).SaveObjPriv(acts(priv), nType, pObjName, pGrantee, 0, 1, .SQLCODE, .sMsg, GrantedBy, .fields)
)

Может через него можно будет добавить только таблицу...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471033
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ymka2007,
class %SQL.Manager.API extends %RegisteredObject

This is a system class that allows control of the Cache SQL environment.
Used by SQL Manager.

classmethod SaveObjPriv(acts As %String, type As %Integer, objs As %String, users As %String, g, revoke As %Integer, ByRef SQLCODE As %Integer, ByRef %msg As %String, GrantedBy As %String = "", ByRef fields As %String = "") as %Status

Parameters: acts - actions to grant. * for all actions a for Alter s for Select i for Insert u for Update d for Delete r for References or any combination type - "1" for table, "3" for view, "9" for procedure objs - name of the table or view users - comma delimited list of users g - 0/1 for WITH GRANT OPTION revoke - 1 if revoke (-1 otherwise) SQLCODE - Passed by reference. Returns SQLCODE contains 0 (success) or number < 0 (error) %msg - Passed by reference. If SQLCODE<0, contains error message. GrantedBy - Who the privilege was granted by. If revoke, revoke from user it was granted by fields - optional, $List of field names to grant or revoke the privs on the objs

Т.е. если использовать этот класс-метод то можно сохранить всю таблицу сразу же, а не по колонкам...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471040
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ymka2007,

Код SaveData

ClassMethod SaveData(pNamespace, pObjName, pGrantee, pObjectType, pSchema, pTable, pColumns = "", pPrivs = "", pGrants = "", pRevoke, pIncludeSystem) As %String [ ZenMethod ]
{

Set $ZT="Error"
Set tResult = ""
Do {
Set GrantedBy = $Username
Set nType = $S(pObjectType="TABLE":1,pObjectType="VIEW":3,1:9)
Set currentNamespace = $zu(5)
If pNamespace '= "",pNamespace '= currentNamespace ZN pNamespace
If pObjName = "" Set pObjName = pSchema _ "." _ pTable
#; If it is revoke all, gather all columns now
If pRevoke = 1,pColumns = "*" Set pColumns = ..GetColumns(pGrantee, pSchema, pTable, pIncludeSystem) Quit:pColumns=""
#; Set columns into $list
Set fields = ""
For r = 1:1:$L(pColumns,",") Set $li(fields,r) = $P(pColumns,",",r)
#; parse out the privileges
Set acts(1)="s",acts(2)="i",acts(3)="u",acts(4)="r"
Set tRow = 2
Set priv = $P(pPrivs,",",tRow)
;&js<alert("#(pPrivs)#");>
;&js<alert("#(priv)#");>
;q
s aa=acts(1)
#; for every priv, grant the privilege:
While priv '= "" {
#; first remove all privileges then save the ones user selected.
Set tSC = ##class(%SQL.Manager.API).SaveObjPriv(acts(priv), nType, pObjName, pGrantee, 0, 1, .SQLCODE, .sMsg, GrantedBy, .fields)

;&js<alert("#(SQLCODE)#");>
If $$$ISERR(tSC) Set tResult = $ZCVT($System.Status.GetErrorText(tSC),"O","HTML") Quit
If SQLCODE '= 0 Set tResult = tResult _ pObjName _ $$$TextHTML("Save failed. Could not remove existing privilege.")_" "_sMsg_"</br>" Quit
Set nGrant = pGrants [ priv

#;s ^%yan("priv",priv)=acts(priv)_"^"_nType_"^"_pObjName_"^"_pGrantee_"^"_nGrant_"^"_0_"^"_GrantedBy_"^"_fields
Set tSC = ##class(%SQL.Manager.API).SaveObjPriv(acts(priv), nType, pObjName, pGrantee, nGrant, 0, .SQLCODE, .sMsg, GrantedBy, .fields)
If SQLCODE '= 0 Set tResult = tResult _ pObjName _ $$$TextHTML("Save failed. Please make sure that you have sufficient SQL privilege to perform this operation.")_" "_sMsg_"</br>" Quit
Set tRow = tRow + 1
Set priv = $P(pPrivs,",",tRow)
}

If pRevoke = 1 {
Set tSC = ##class(%SQL.Manager.API).SaveObjPriv("*", nType, pObjName, pGrantee, 0, 1, .SQLCODE, .sMsg, GrantedBy, .fields)
}

If SQLCODE '= 0 {
Set tResult = tResult _" ["_SQLCODE_"]"_sMsg_"<br>"
}

ZN currentNamespace

} While 0
Quit tResult
Error ///
Set $ZT="" Do BACK^%ETN
Set tResult = $ZCVT($ZE,"O","HTML")
Quit tResult
}
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471086
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВыведите имя текущего пользователя и его роли:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
<html align="center"><h2>Пример работы ресурсов</h2></html>
<html align="center" OnDrawContent="DrawMessage"/>
...
</page>
}

Method DrawMessage(pSeed As %String) As %Status
{
  &html<<h1>Пользователь: #($UserName)#</h1>>
  &html<<h1>Его роли: #($ROLES)#</h1>>
  Quit $$$OK
}

Завтра продолжим, спасибо что помогаете... А то тут без бутылки не разобраться...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471729
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил что советовали...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
/// This XML block defines the contents of this page.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
	<html>
		<p>Пример работы ресурсов</p>
	</html>
	<html OnDrawContent="DrawMessage"/>
	<button id="btAdm" caption="ADM" resource="UCH_ADM" />
	<button id="btUser" caption="USER" resource="UCH_USER" />
</page>
}
Method DrawMessage(pSeed As %String) As %Status
{
  &html<<p>Пользователь: #($UserName)#</p>>
  &html<<p>Его роли: #($ROLES)#</p>>
  Quit $$$OK
}

Вот что получилось...


----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471743
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот описание самой роли...



Как видно там есть ресурс UCH_ADM
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471864
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Оставьте ресурсы
%DB_%DEFAULT
%DB_CACHESYS
UCH_ADM

остальные удалите. И зайдите в систему под пользователем для которого определена роль UCH_R_ADM.
В этом случае Вы должны видеть только кнопку UCH_ADM.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471941
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuraMОставьте ресурсы
%DB_%DEFAULT
%DB_CACHESYS
UCH_ADM

остальные удалите.
Сейчас сделаю...

YuraMИ зайдите в систему под пользователем для которого определена роль UCH_R_ADM.
В этом случае Вы должны видеть только кнопку UCH_ADM.
Таки и так только таким вхожу... Входил и тем для кого другая кнопка доступна... Да только видны всегда пока обе.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471956
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменил роль...



Но так все и осталось...



Хотя и браузеры закрывал... И логинился всякий раз...

Вот описание пользователя.



Куда еще смотреть?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471966
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно... Если например написать вот так

Код: plaintext
1.
<button id="btAdm" caption="ADM" resource="UCH_R_ADM" />
<button id="btUser" caption="USER" resource="UCH_R_USER" />

обе кнопки исчезают!
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36471970
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так...

Код: plaintext
1.
<button id="btAdm" caption="ADM" resource="UCH_ADM1" />
<button id="btUser" caption="USER" resource="UCH_USER1" />

Т.е. они видны если ресурс вообще существует в описании Каше. И не обязательно привязан к пользователю...
Я так пока понял.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472026
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Посмотрите профиль пользователя. Какие ресурсы и службы ему доступны. Были случаи(когда при инсталяции Cache' выбирался максимальный уровень безопасности) при добавлении нового пользователя ему присваивался ресурс %All. В списке выбранных ресурсов он отсутсвовал, а в профиле пользователя отображался...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472084
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Попробуйте убрать и ресурсы
%DB_%DEFAULT
%DB_CACHESYS

Оставьте только свой ресурс. Без ресурсов %DB_%DEFAULT и %DB_CACHESYS должна возникнуть ошибка на странице.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472116
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот что нарыл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
METHODS: SaveObjPriv
FormalSpec: acts:%String,type:%Integer,objs:%String,users:%String,g,revoke:%Integer,&SQLCODE:%Integer,&%msg:%String,GrantedBy:%String="",&fields:%String=""
Description: <blockquote>
Parameters:
acts	    - actions to grant. * for all actions
a for Alter
s for Select
i for Insert
u for Update
d for Delete
r for References
or any combination
type      - "1" for table, "3" for view, "9" for procedure
objs      - name of the table or view
users     - comma delimited list of users
g         -  0 / 1  for WITH GRANT OPTION
revoke    -  1  if revoke (- 1  otherwise)
SQLCODE   - Passed by reference.  Returns SQLCODE
contains  0  (success) or number <  0  (error)
%msg      - Passed by reference.  If SQLCODE< 0 , contains error message.
GrantedBy - Who the privilege was granted by.  If revoke, revoke from user it was granted by
fields    - optional, $List of field names to grant or revoke the privs on the objs
</blockquote>
Code:  
  Set SQLCODE= 0 ,%msg=""
  #; The last parameter is cascade. It's set to zero now.
  If revoke= 1  Do setup1^%SYS.SQLSEC(acts,type,$lb(objs),users,g, 0 ,,,GrantedBy,.fields) QUIT $$$OK 
  // Revoke
  #; The last parameter is %check (check to make sure user has grantable priv)
  Do setup^%SYS.SQLSEC(acts,type,$lb(objs),users,g, 1 ,GrantedBy,.fields)	// Grant
  Quit $$$OK
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472151
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для:
classmethod SaveObjPriv(acts As %String, type As %Integer, objs As %String, users As %String, g, revoke As %Integer, ByRef SQLCODE As %Integer, ByRef %msg As %String, GrantedBy As %String = "", ByRef fields As %String = "") as %Status
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472178
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем разобрался!
вот программа: %Z.ex.sqlsec (находится в области %SYS)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 1 
 S act="s" 					//привелегия (select,insert,update,...)
 S type= 1 					//"1" for table, "3" for view, "9" for procedure
 S objs="hndb.ageGroup"		//имя таблицы
 S users="Portal_USER"		//пользователи (ресурсы???)
 S g= 1 						// 0 / 1  for WITH GRANT OPTION
 S revoke=- 1 				// 1  если отменить (- 1  в противном случае)
 //s SQLCODE   				//передается по ссылке. Возвращает SQLCODE
 //contains 				// 0  (Успех) или number <  0  (Ошибка)
 //%msg      				//передается по ссылке. Если SQLCODE< 0 , содержит сообщение об ошибке.
 S GrantedBy=$Username		//Кто привилегия была предоставлена. Если отменить, 
 							//аннулировать от пользователя, полученный от
 
 //fields  					//- факультативно, $List имен полей, 
 							//чтобы предоставить или отменить privs на OBJS
 //classmethod SaveObjPriv(
 			//acts As %String, 
 			//type As %Integer, 
 			//objs As %String, 
 			//users As %String, 
 			//g, 
 			//revoke As %Integer, 
 			//ByRef SQLCODE As %Integer, 
 			//ByRef %msg As %String, 
 			//GrantedBy As %String = "", 
 			//ByRef fields As %String = "") as %Status
 S sc=##class(%SQL.Manager.API).SaveObjPriv(act,type,objs,users,g,revoke,.SQLCODE,.msg,GrantedBy)
 w sc,!,SQLCODE,!,msg
 I +sc'= 1  w $SYSTEM.OBJ.DisplayError(sc)
 Q 
для того что бы все сработало нужно её запустить из той области в которой находится таблица objs , тогда все получается и прописывается
если программа запускается из области в которой нет такой таблицы, то действие выполняется, только результата нет.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472184
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuraMПопробуйте убрать и ресурсы
%DB_%DEFAULT
%DB_CACHESYS

Оставьте только свой ресурс. Без ресурсов %DB_%DEFAULT и %DB_CACHESYS должна возникнуть ошибка на странице.
Это я уже пробовал... Если убрать хоть один из них - ошибка на странице...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472194
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuraMПосмотрите профиль пользователя. Какие ресурсы и службы ему доступны.
Там есть оба профиля! И куча еще чего, что я удалил давно.



YuraMБыли случаи(когда при инсталяции Cache' выбирался максимальный уровень безопасности) при добавлении нового пользователя ему присваивался ресурс %All. В списке выбранных ресурсов он отсутсвовал, а в профиле пользователя отображался...
И как теперь бороться т.с. "за чистоту" профиля?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472202
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас установка Каше с минимальной безопастностью...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472712
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как теперь профиль-то почистить?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472739
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал создать нового пользевателя... Так мои ресурсы ему прописались сразу, как только я его записал. Т.е. даже роль ни какую ему не давал...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472835
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
потому что когда создаешь ресурс нужно сразу все галки отключить
а включать их уже со страницы пользователя
по умолчанию все вкулюченные сразу прописываются новичку
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472853
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007потому что когда создаешь ресурс нужно сразу все галки отключить
а включать их уже со страницы пользователя
по умолчанию все вкулюченные сразу прописываются новичку
Сейчас проведу испытания...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472864
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот вопрос
для передачи используется
objs - name of the table or view
я так понял это название таблицы или представления, не важно
вот FormalSpec: acts:%String,type:%Integer, objs:%String ,users:%String,g,revoke:%Integer,&SQLCODE:%Integer,&%msg:%String,GrantedBy:%String="",&fields:%String=""
т.е. при вызове я могу передать в этом параметре стринговую переменную,
а дальше, см. код:
Код: plaintext
1.
2.
3.
4.
5.
6.
Set SQLCODE= 0 ,%msg=""
 #; The last parameter is cascade. It's set to zero now.
 If revoke= 1  Do setup1^%SYS.SQLSEC(acts,type,$lb(objs),users,g, 0 ,,,GrantedBy,.fields) QUIT $$$OK 
// Revoke
#; The last parameter is %check (check to make sure user has grantable priv)
 Do setup^%SYS.SQLSEC(acts,type,$lb(objs),users,g, 1 ,GrantedBy,.fields)	// Grant
 Quit $$$OK
в строке: Do setup^%SYS.SQLSEC(acts,type, $lb(objs) ,users,g,1,GrantedBy,.fields)

как передать в стринговой переменной несколько названий таблиц?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472869
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

проверено электроникой , все ужо запрограммировано в автоматический режим
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36472885
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заработало!
Большее всем спасибо.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36501317
cachezen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак понять не могу. Можно ли использовать resource, если я использую свои таблицы с ролями, разрешениями и пользователями?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36501384
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cachezenМожно ли использовать resource
Для начала нужна "кащейская" регистрация пользователей...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36501547
cachezen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsacachezenМожно ли использовать resource
Для начала нужна "кащейская" регистрация пользователей...

т.е. возможно ли при авторизации в моем приложении, регистрировать временного пользователя в cache, чтоб управлять содержимым зен страницы?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36501582
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно что у вас и как...
Но если выполнить "кащейскую" регистрацию - сразу начнет работать ресурс на всх зен-компанентах где оный прописан...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36501768
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cachezenНикак понять не могу. Можно ли использовать resource, если я использую свои таблицы с ролями, разрешениями и пользователями?

Воспользуйтесь Delegated Authorization и/или Delegated Authentication .
Примеры использования безопасности можно найти в Security Tutorial
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36501796
cachezen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitcachezenНикак понять не могу. Можно ли использовать resource, если я использую свои таблицы с ролями, разрешениями и пользователями?

Воспользуйтесь Delegated Authorization и/или Delegated Authentication .
Примеры использования безопасности можно найти в Security Tutorial
спасибо, буду изучать
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Научите как пользоваться resource...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]